我在下面给出了一个查询,我想在其中转换它的类型。
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无效的匿名类型成员声明符。匿名类型 必须使用成员作业,简单名称或成员声明成员 会员访问。
如何处理此转换?
答案 0 :(得分:1)
这意味着您需要将名称分配给该匿名成员的值。
例如:
from o in db.Orders
select new { OrderNumber = o.OrderNumber, Name = o.Name,
State = o.State, Date = Convert.ToDateTime(o.OrderNumber) }
答案 1 :(得分:1)
您需要命名您的匿名类型的成员。有时编译器会自动选择一个名称(例如,在分配属性时),但有时候,它是不可能的:
vvvv
new { o.OrderNumber, o.Name, o.State, OrderDateTime = Convert.ToDateTime(o.OrderNumber) }
答案 2 :(得分:1)
尝试
var r= (from o in db.Orders
select new { o.OrderNumber,o.Name,o.State,
OrderDate = Convert.ToDateTime(o.OrderDate) }
).ToList();
修改
首先尝试实现查询。
var query = db.Orders.ToList().Select(o => new {
o.OrderNumber,
o.Name,
o.State,
OrderDate = Convert.ToDateTime(o.OrderNumber)
}).ToList();
答案 3 :(得分:0)
执行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查询中使用转换为其数据库等效项的函数。
有关详情,请参阅SqlFunctions和EntityFunctions课程。