Как использовать CAST, CONVERT и isNULL в LINQ?

1

У меня есть запрос:

SELECT TOP 50 CONVERT(date, o.OrderDate)as OrderDate,ISNULL(rd.SerialNumbers,'') as SerialNumbers,CAST(o.SourceOrderID as varchar(50)) as SourceOrderNumber
From Orders o

Запрос редактируется для вопроса.

var lq= (
                    from o in db.Orders
 select new {,o.Name, o.Company, o.Address, o.Address2, o.City, o.State, o.Country, o.Email, o.Zip, o.Phone, o.ShipName, o.ShipCompany, o.ShipAddress, o.ShipAddress2, o.ShipCity, o.ShipCountry, o.ShipState, o.ShipPhone, o.ShipZip, o.OrderNumber, o.ShippingTotal }
            ).ToList();

Я могу сделать простые объединения и выбрать в LINQ, но не получить представление о том, как получить выборки, подобные упомянутым в запросе.

Я использую EF

  • 0
    Было бы полезно, если бы вы сказали нам, какова ваша схема.
  • 0
    Не пытайтесь слишком сильно переводить SQL в LINQ. Вместо этого: как бы вы использовали код C # для перехода от значений, предоставленных базой данных (или EF) к запрашиваемым типам? Это может также работать в LINQ.
Показать ещё 2 комментария
Теги:
linq
entity-framework

2 ответа

1
Лучший ответ

Поскольку нет способа фактически выполнить преобразование string в datetime как часть запроса БД с использованием LINQ, рекомендуется использовать AsEnumerable для переключения контекста списка для запуска фактического преобразования в память

orders.Take(50)
      .AsEnumerable()
      .Select(x => new {
          OrderDate = x.OrderDate.Date,
          SerialNumbers = o.SerialNumbers ?? "",
          SourceOrderNumber = o.SourceOrderID.ToString()
      });
  • 1
    Возможно, вы захотите сделать предварительный Select чтобы не вытягивать все из базы данных. (И да, поместите Take перед AsEnumerable , иначе вы извлекаете записи «кто знает сколько» ...)
  • 0
    просто хотел отметить, что если вы берете первые 50, OP, вы захотите делать orders.OrderBy().Take(50).AsEnumerable()...
Показать ещё 17 комментариев
0

LINQ2SQL на самом деле достаточно яркий, чтобы обрабатывать синтаксический анализ в коде:

var q = from c in Customers
where c.PhoneNumber == "9075556658"
select new 
    { 
    SSN = c.SSN, 
    DOB = DateTime.Parse(c.BirthDate)
    };
q.Dump();

Я просто запустил это в LinqPad в моей собственной базе данных, и он работал нормально.

ПРИМЕЧАНИЕ. Это было протестировано с Linq2SQL, а не с платформой Entity Framework, которая не может делать то, что Linq2SQL делает в течение многих лет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню