如何在LINQ中使用CAST,CONVERT和isNULL?

时间:2015-01-20 15:38:39

标签: c# linq entity-framework

我有查询:

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

2 个答案:

答案 0 :(得分:1)

鉴于使用LINQ无法实际执行stringdatetime转换作为数据库查询的一部分,建议您使用AsEnumerable来切换上下文在内存中运行实际转换的列表

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

答案 1 :(得分:-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进行测试的,而不是实体框架,它有一段历史,无法做Linq2SQL多年来一直在做的事情。