Linq的表现包含

Hoo*_*ody 1 c# linq linq-to-sql

我需要使用过滤器列表过滤linq查询,我计划使用contains方法来执行此操作.所以它看起来像这样.

List<string> filter = new List<string>();
filter.Add("foo");
filter.Add("bar");
//Additional filters go here, max of about 10 filters
var test = dbcontext.books.Where(x => filter.Contains(x.name)).ToList();
Run Code Online (Sandbox Code Playgroud)

此查询后面的表有很多记录(500,000),PK标识字段和我要查询的字段上的索引.

我的问题是在走这条路线之前您是否希望此查询的性能可以接受,或者我应该在这么大的数据集上使用不同的方法?

Mar*_*ell 6

是的,那应该没事; 那只会转化为

select x.* from [books] x where x.name in (@p0,@p1)
Run Code Online (Sandbox Code Playgroud)

@p0 = 'foo'@p1 = 'bar'; 只要name索引它就应该没问题.但是,如果filter变得非常大,它会变得更有趣.10项听起来不错.我也隐含地假设它不会返回全部500,000 - 但是会限制在一个合理的数字; 如果没有,请考虑添加一些.Take(number)限制.

如果担心,只需测量它.运行SQL跟踪或使用分析工具非常容易.