C# 如何在LINQ中执行数据类型转换?
我有一个下面给出的查询,我想在其中转换它的类型C# 如何在LINQ中执行数据类型转换?,c#,linq,C#,Linq,我有一个下面给出的查询,我想在其中转换它的类型 Select CONVERT(date, o.OrderDate)as OrderDate From Orders 我写以下声明: var r= ( from o in db.Orders select new { o.OrderNumber,o.Name,o.State,Convert.ToDateTime(o.OrderNumber) }
Select
CONVERT(date, o.OrderDate)as OrderDate
From Orders
我写以下声明:
var r= (
from o in db.Orders
select new { o.OrderNumber,o.Name,o.State,Convert.ToDateTime(o.OrderNumber) }
).ToList();
所以它给出了一个错误:
错误18无效的匿名类型成员声明符。匿名类型
必须使用成员赋值、简单名称或
成员访问
如何处理此转换?这意味着您需要为匿名成员的值指定名称 例如:
from o in db.Orders
select new { OrderNumber = o.OrderNumber, Name = o.Name,
State = o.State, Date = Convert.ToDateTime(o.OrderNumber) }
您需要命名匿名类型的成员。有时编译器会自动选择名称(例如,当您分配属性时),但有时不可能:
vvvv
new { o.OrderNumber, o.Name, o.State, OrderDateTime = Convert.ToDateTime(o.OrderNumber) }
试一试
编辑
请尝试先具体化查询
var query = db.Orders.ToList().Select(o => new {
o.OrderNumber,
o.Name,
o.State,
OrderDate = Convert.ToDateTime(o.OrderNumber)
}).ToList();
当您执行LINQ to Entities查询时,它将使用底层数据提供程序转换为等效的数据库端代码 恰好没有从
Convert.ToDateTime()
到SQL Server等效项的映射
取而代之的是,在按照如下方式检索数据之后,您可以在内存中执行此操作
var r=
(from o in db.Orders
select new { o.OrderNumber, o.Name, o.State })
.AsEnumerable() // Execute the above query
.Select(order => new { order.OrderNumber, order.Name, order.State, OrderDate = Convert.ToDateTime(order.OrderNumber)})
.ToList();
(为了便于阅读,您还可以将其分为两个查询。)
还可以在L2E查询中使用一些函数,这些函数将转换为它们的等效数据库
有关详细信息,请参阅和类。LINQ to Entities无法识别方法“System.DateTime ToDateTime(System.String)”方法。不确定它是否与我的问题有关。我获取LINQ to Entities的错误无法识别“System.DateTime ToDateTime(System.String)”方法,但它给出了错误:获取LINQ to Entities的错误无法识别“System.DateTime ToDateTime(System.String)”方法。是否正确复制了代码?
Convert.ToDateTime()
在Linq to对象上运行,而不是在Linq to实体上运行。我是Linq新手。我主要关心的是我在原始SQL查询中提到的类型转换。我正在寻找LINQ的等效产品
var r=
(from o in db.Orders
select new { o.OrderNumber, o.Name, o.State })
.AsEnumerable() // Execute the above query
.Select(order => new { order.OrderNumber, order.Name, order.State, OrderDate = Convert.ToDateTime(order.OrderNumber)})
.ToList();