2015-01-20 3 views
1

У меня есть запрос:Как использовать CAST, CONVERT и isNULL в LINQ?

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

Это поможет, если вы сообщите нам, что такое ваша схема. – Rawling

+0

Не пытайтесь слишком много перевести SQL в LINQ. Вместо этого: как бы вы использовали код C# для перехода от значений, предоставленных базой данных (или EF), к запрошенным типам? Это может также работать в LINQ. –

+0

Вы используете EF? –

ответ

1

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

orders.Take(50) 
     .AsEnumerable() 
     .Select(x => new { 
      OrderDate = x.OrderDate.Date, 
      SerialNumbers = o.SerialNumbers ?? "", 
      SourceOrderNumber = o.SourceOrderID.ToString() 
     }); 
+1

Возможно, вы захотите сделать pre-'Select', чтобы не вытащить все из базы данных. (И да, поставьте 'Take' * before *' AsEnumerable', иначе вы потянете записи who-know-how-many ...) – Rawling

+0

просто хотел заметить, что если вы принимаете 50 лучших, OP, вы захотите сделать 'orders.OrderBy(). Возьмите (50) .AsEnumerable() ...' – DLeh

+0

@ Точка ретрансляции отмечена, однако, это не имеет большого значения, поскольку это полезный ответ (во всяком случае, это просто усложнит пример). – James

-1

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 делает в течение многих лет.

Смежные вопросы