Cas*_*ton 0 .net c# linq asp.net
这个问题与以下问题非常相似: 使用LINQ可以在一个List <>中获得项目,而不在另一个List <>中。但是这些差异足以使我难以确定LINQ语法。
我有两个清单:
List<Fubar> fewBarNew
List<string> existingProviderIDs
Run Code Online (Sandbox Code Playgroud)
其中Fubar的样子:
Class Fubar
{
int FunbarId int {get; set;}
....
....
string ProviderID {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
现在,我要从fewBarNew中FewBarNew.ProviderID存在的任何实例中删除existingProviderIDs。
fewBarNew = fewBarNew.Where(f => !existingProviderIdList.Any(ep => ?????).ToList();
Run Code Online (Sandbox Code Playgroud)
Any使您能够检查集合中是否有任何项与某个谓词匹配。因此,您可以将谓词定义为“如果有任何项与当前项匹配”:
fewBarNew.Where(f => !existingProviderIdList.Any(ep => ep == f.ProviderID));
Run Code Online (Sandbox Code Playgroud)
但是,我认为使用一种更干净的方法是.Contains:
var result = fewBarNew.Where(f => !existingProviderIDs.Contains(f.ProviderID));
Run Code Online (Sandbox Code Playgroud)
然后,随着此过程的进行,O(n^2)您可以改用a HashSet<string>来改进:
var existingProviderIDSet = new HashSet<string>(existingProviderIDs);
var result = fewBarNew.Where(f => !existingProviderIDSet.Contains(f.ProviderID));
Run Code Online (Sandbox Code Playgroud)
如HashSet的Contains执行的O(1)操作,这将执行O(n)。
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |