Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在LINQ中执行数据类型转换?_C#_Linq - Fatal编程技术网

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();