我有以下查询接收一个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()方法更好的方法。
感谢。
答案 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,因此不需要使用其他任何东西。