将.Contains()与linq一起用于sql

本文关键字:一起 用于 sql linq Contains | 更新日期: 2023-09-27 18:21:51

我有以下查询,它接收作为参数的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()方法更好的方法。

谢谢。

将.Contains()与linq一起用于sql

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

另一方面,您应该尝试按日期降序对查询进行排序,并使用FirstOrDefault()。现在,你将带回整个结果集,并扔掉除一行外的每一行。

linq query中包含list.Contains()时,您应该小心处理此类查询。因为对于每个列表元素,它将在sql statement中创建一个参数

sql语句<= 2100中允许的参数数量有限。因此,如果TheIDs将包含多于2100元素,则将失败

如果您想以这种方式使用,您至少应该检查TheIDscount,如果多于2100,则使用少于2100的元素将其分解。

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