使用.contains()和linq-to-sql

时间:2012-01-27 14:22:58

标签: c# asp.net linq linq-to-sql

我有以下查询接收一个int列表作为参数:

public int GetMostRecent(List<int> TheIDs)
{
 ...using MyDC...

   var TheMostRecentID = (from d in MyDC.Data
                           where TheIDs.Contains(d.ID)
                           orderby d.DateTime
                           select d.ID).LastOrDefault(); 
}

这是将参数集合中的列表与数据库中的数据进行匹配的最佳方法,还是比使用linq-to-sql中的.Contains()方法更好的方法。

感谢。

3 个答案:

答案 0 :(得分:8)

你拥有的是正确的。这将被转换为SQL中的IN子句,其中包含集合中提供的值。

在不相关的说明中,您应该尝试按日期降序排序查询并使用FirstOrDefault()。就像现在一样,你将把整个结果集带回来并扔掉除了一行之外的所有行。

答案 1 :(得分:2)

list.Contains()linq query的此类查询应该小心。因为对于每个列表元素,它将在sql statement中创建 param

在sql语句<= 2100中允许有限数量的参数。 因此,如果 TheIDs 包含的内容超过2100,则失败

如果你想以这种方式使用,你至少应该检查你的 TheID count,如果更多,那么2100将其分成小于{{1}的片段元素。

答案 2 :(得分:1)

这将转化为高效的SQL,因此不需要使用其他任何东西。