SLa*_*aks 56
是.
正如其他人已经回答的那样,你可以使用Where,但对于大型套装来说效率极低.
如果需要考虑性能,可以致电Join:
var results = original.Join(idsToFind, o => o.Id, id => id, (o, id) => o);
Run Code Online (Sandbox Code Playgroud)
如果idsToFind可以包含重复项,则需要调用Distinct()ID或结果或替换Join为GroupJoin (GroupJoin的参数将相同).
Dra*_*lut 15
我会发一个答案Intersect.
如果要与IEnumerables相同类型的2相交,这非常有用.
首先我们需要一个EqualityComparer:
public class KeyEqualityComparer<T> : IEqualityComparer<T>
{
private readonly Func<T, object> keyExtractor;
public KeyEqualityComparer(Func<T, object> keyExtractor)
{
this.keyExtractor = keyExtractor;
}
public bool Equals(T x, T y)
{
return this.keyExtractor(x).Equals(this.keyExtractor(y));
}
public int GetHashCode(T obj)
{
return this.keyExtractor(obj).GetHashCode();
}
}
Run Code Online (Sandbox Code Playgroud)
其次,我们应用KeyEqualityComparer的Intersect功能:
var list3= list1.Intersect(list2, new KeyEqualityComparer<ClassToCompare>(s => s.Id));
Run Code Online (Sandbox Code Playgroud)
您可以这样做,但在当前表单中,您需要使用Where扩展方法.
var results = original.Where(x => yourEnumerable.Contains(x.ID));
Run Code Online (Sandbox Code Playgroud)
Intersect另一方面,将找到两者中IEnumerable的元素.如果您只想查找ID列表,可以执行以下操作Intersect
var ids = original.Select(x => x.ID).Intersect(yourEnumerable);
Run Code Online (Sandbox Code Playgroud)
一个简单的方法是:
IEnumerable<ClassA> result = original.Where(a => idsToFind.contains(a.ID));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77571 次 |
| 最近记录: |