使用IN子句将SQL脚本转换为LINQ

时间:2012-05-10 16:19:38

标签: sql linq

我正在尝试研究如何将下面的脚本从SQL转换为LINQ。欢迎任何帮助。

SELECT *
FROM
    [tableName]
WHERE
[MyDate] IN
    (SELECT
        MAX([MyDate])
   FROM
      [tableName]
   GROUP BY
      [MyID])

我找不到“IN”子句部分的等价物。此论坛上存在一些问题,但没有涉及选择DateTime的问题。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以使用“.Contains(..)”函数: e.g。

var itemQuery = from cartItems in db.SalesOrderDetails
              where cartItems.SalesOrderID == 75144
              select cartItems.ProductID;

var myProducts = from p in db.Products
                where itemQuery.Contains(p.ProductID)
                select p;

虽然它看起来像往返2次,因为LINQ只在IEnumerable被触发时构造查询,你应该得到合理的性能。

答案 1 :(得分:0)

我认为Any()正是您所寻找的:

var result = tableName.Where(x => 
                (from t in tableName
                group t by t.MyID into g
                where g.Max(y => y.MyDate) == x.MyDate
                select 1).Any())