我有一个整数列表和一个对象列表(Class_A),其中整数作为标识符。 什么是基于整数列表中的id创建对象列表(Class_A)的好方法。
我被困在了:
List<class_A> list = A_List.FindAll(delegate(class_A tmp)
{ return ids.Contains(tmp.ID); });
void main()
{
List<int> ids = new List<int>();
ids.Add(1);
ids.Add(3);
ids.Add(5);
List<class_A> A_List = new List<class_A>();
A_List.Add(new class_A(1, "one"));
A_List.Add(new class_A(2, "two"));
A_List.Add(new class_A(3, "three"));
A_List.Add(new class_A(4, "four"));
A_List.Add(new class_A(7, "seven"));
}
public class class_A
{
public int ID { get; set; }
public string Text { get; set; }
public class_A( int id,string text)
{
Text = text;
ID = id;
}
}
答案 0 :(得分:8)
看起来像是对我的加入:
var query = A_List.Join(ids, x => x.ID, y => y, (x, y) => x)
.ToList();
或者以查询表达式格式:
var query = (from a in A_List
join id in ids on a.ID equals id
select a).ToList();
如果您实际上不需要List<T>
,但IEnumerable<T>
对您来说没问题(例如,您只需迭代一次),请暂停ToList()
来电
假设您有LINQ可用。如果您不拥有LINQ或C#3,您可以使用:
List<A> matches = A_List.FindAll(delegate(A a) { return ids.Contains(a.ID); });
答案 1 :(得分:1)
非优化版本:
var instancesOfAInList = ids.Where(id => A_List.Any(a => a.ID == id));
答案 2 :(得分:0)
A_List.Where(c => ids.Contains(c.ID));