C# LINQ-C中的Where子句#
我有以下几项在中工作 我将如何转换为?从测试代码中,编译器抱怨: 错误运算符“&&”不能应用于“int”和“System.DateTime”类型的操作数 我的LINQ代码:C# LINQ-C中的Where子句#,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我有以下几项在中工作 我将如何转换为?从测试代码中,编译器抱怨: 错误运算符“&&”不能应用于“int”和“System.DateTime”类型的操作数 我的LINQ代码: var query = from ch in cdo.order_histories join c in cdo.orders on ch.order_id equals c.order_id where (ch.order_id.equals(1234)) && (ch.date_i
var query = from ch in cdo.order_histories
join c in cdo.orders on ch.order_id equals c.order_id
where (ch.order_id.equals(1234)) &&
(ch.date_inserted == (cdo.order_histories.Max(p => p.date_inserted)))
select new OrderData() { };
更新:我没有使用“==”进行比较
剩余项是来自我的SQL查询的:
oh.date_inserted = (
select max(date_inserted) from order_history where order_id = oh.order_id
group by order_id)
在LINQ中我该怎么做?同意,这里需要一些C代码,但我不知道-您使用的是“==”(评估)而不是“=”(赋值),对吗?C#在这里与SQL没有区别。同意,这里需要一些C#代码,但我不知道-您使用的是“===”(评估)而不是“=”(赋值),对吗?C#在这里区分了SQL没有区分的地方。在
order_id
字段中进行过滤时,您似乎在某处缺少等号。你可能有:
oh.order_id = 20119 && ...
鉴于您应该:
请注意相等运算符与赋值运算符。赋值运算符的结果是被赋值的值,这就是为什么错误显示无法比较int和System.DateTime的操作数
我还假设您在检查插入的date\u的值时也有同样的问题
对于问题的第二部分,相关子查询的转换已接近完成
在SQL中,您有:
oh.date_inserted = (
select max(date_inserted) from order_history where order_id = oh.order_id
group by order_id)
在LINQ to SQL中,您拥有
ch.date_inserted == (cdo.order_histories.Max(p => p.date_inserted))
您只需为order\u历史记录添加过滤器,它利用闭包捕获ch
实例上的order\u id
值,如下所示:
ch.date_inserted == (cdo.order_histories.
Where(ch2 => ch2.order_id == ch.order_id).
Max(p => p.date_inserted))
在order\u id
字段中进行筛选时,您似乎在某处缺少等号。你可能有:
oh.order_id = 20119 && ...
鉴于您应该:
请注意相等运算符与赋值运算符。赋值运算符的结果是被赋值的值,这就是为什么错误显示无法比较int和System.DateTime的操作数
我还假设您在检查插入的date\u的值时也有同样的问题
对于问题的第二部分,相关子查询的转换已接近完成
在SQL中,您有:
oh.date_inserted = (
select max(date_inserted) from order_history where order_id = oh.order_id
group by order_id)
在LINQ to SQL中,您拥有
ch.date_inserted == (cdo.order_histories.Max(p => p.date_inserted))
您只需为order\u历史记录添加过滤器,它利用闭包捕获ch
实例上的order\u id
值,如下所示:
ch.date_inserted == (cdo.order_histories.
Where(ch2 => ch2.order_id == ch.order_id).
Max(p => p.date_inserted))
您可以将SQL转换为LINQ。。。或者你可以根据自己的需要编写LINQ
var result = cdo.order_histories
.Where(oh => oh.order_id == 20119)
.OrderByDescending(oh => oh.date_inserted)
.Take(1)
.Select(oh => new {history = oh, order = oh.order}
.Single();
您可以将SQL转换为LINQ。。。或者你可以根据自己的需要编写LINQ
var result = cdo.order_histories
.Where(oh => oh.order_id == 20119)
.OrderByDescending(oh => oh.date_inserted)
.Take(1)
.Select(oh => new {history = oh, order = oh.order}
.Single();
@ltech:嗯,您现在没有显示LINQtoSQL代码中的内容,所以这有点困难。您也没有指定是使用LINQ-to-SQL还是LINQ-to-Entities。首先,在C中,=
用于赋值,==
用于测试相等性。@ltech:您现在没有显示LINQ-to-SQL代码中的内容,所以有点困难。您也没有指定是使用LINQ到SQL还是LINQ到实体。首先,在C中,=
用于赋值,而=
用于测试相等性。