Sté*_*écy 5 c# linq select subset
我想使用myFilters从myCollection中选择元素进行过滤:
var myFilters = new List<string> {"111", "222"};
var myCollection = new List<SomeClass> {
new SomeClass ("111"),
new SomeClass ("999")
};
from filter in myFilters
from item in myCollection
where item.Name == filter
select item
Run Code Online (Sandbox Code Playgroud)
将返回"111"项.
但是,如果myFilters为空,我想从myCollection返回所有项目.
var myFilters = new List<string> ();
var myCollection = new List<SomeClass> {
new SomeClass ("111"),
new SomeClass ("999")
};
// Here's where I'm lost...
from filter in myFilters
from item in myCollection
where item.Name == filter
select item
Run Code Online (Sandbox Code Playgroud)
将返回所有项目("111"和"999").
如果这些集合规模很大,那么我建议使用连接.它看起来像这样:
var result =
myFilters.Any() ?
from item in myCollection
join filter in myFilters
on item.Name equals filter into gj
where gj.Any()
select item
: myCollection;
Run Code Online (Sandbox Code Playgroud)
使用连接的机会很容易被忽视.当列表远程大时,此连接方法将优于包含方法.如果它们很小并且性能可以接受,那么请使用最清晰的.
var result = myCollection
.Where(i => (!myFilters.Any() || myFilters.Contains(i.Name)));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27540 次 |
| 最近记录: |