C# LINQ-C中的Where子句#

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

我有以下几项在中工作

我将如何转换为?从测试代码中,编译器抱怨:

错误运算符“&&”不能应用于“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_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中,
=
用于赋值,而
=
用于测试相等性。