目前,我使用类似这样的代码块来获取一组具有匹配ID的DB对象。
List<subjects> getSubjectsById(List<long> subjectIDs){
return ctx.tagSubjects.Where(t => subjectIDs.Contains(t.id)).ToList();
}但这实际上效率很低,因为它需要从数据库中读取整个表,然后在C#中进行过滤。
我更愿意做的是等同于:
SELECT * FROM subjects WHERE subjects.id IN (1,2,3,4,5,...);最大的区别在于,在第一个例子中,过滤发生在C#代码中,而在第二个例子中,过滤是在SQL server (数据所在的地方)上进行的。
有没有更好的办法用LINQ做到这一点呢?
发布于 2009-09-21 09:18:47
您是在哪里发现它从SQL Server下载整个表的?
我敢肯定它能做你想要的。它将查询转换为参数化的IN子句,如下所示:
... IN (@p1, @p2, @p3)并将列表的内容作为值传递给这些参数。您可以使用诸如SQL Profiler和LINQ to SQL debugger可视化工具来确认这一点,或者将DataContext.Log属性设置为console (在执行查询之前)并读取生成的SQL:
dataContext.Log = Console.Out;https://stackoverflow.com/questions/1453567
复制相似问题