我想填充一个列表,其中对象中的值位于我已经填充的另一个列表中。请参阅以下内容:
//Populate first object
List<Object1> listObject1 = da.dbsetObject1.Where(p=>p.ID.Equals(SomeID)).ToList();
//Populate second object - what I want to do but can't figure out
List<Object2> listObject2 = da.dbsetObject2.Where(p=>p.ID.Contains(listObject1.Object1ID)).ToList();
我知道包含不起作用,但我想基本上用所有具有匹配Object1ID的值填充listObject2。在sql表中,这将是一个外键关系。
答案 0 :(得分:4)
然后join
两个列表:
var results = from l2 in listObject2
join l1 in listObject1 on l2.ID equals l1.Object1ID
select new{anonymous type}
答案 1 :(得分:3)
修改强>
基于评论中的更新信息
var lstObject1 = listObject1.Select(item -> item.ObjectId).ToArray();
List<Object2> listObject2 = da.dbsetObject2.Where(p=> lstObject1.Contains(p.ObjectId)).ToList();
原创
问题在代码中不明确
假设你不能在List中输入p.ID,结果查询是
List<Object2> listObject2 = da.dbsetObject2.Where(p=> listObject1.Contains(p.ID)).ToList();
答案 2 :(得分:1)
尝试这样的事情。
//Populate first object
List<Object1> listObject1 = da.dbsetObject1.Where(p => p.ID.Equals(SomeID)).ToList();
//Populate second object - what I want to do but can't figure out
List<Object2> listObject2 = da.dbsetObject2.Where(p => listObject1.Any(q => q.ID == p.foreignID)).ToList();
<强>更新强>
void SomeMethod(){
var arr = new Object1[]{
new Object1{Name="n1",ID=1},
new Object1{Name="n2",ID=2},
new Object1{Name="n3",ID=3},
new Object1{Name="n4",ID=4}
};
var arr2 = new Object2[]{
new Object2{Name="o1", Ref=1},
new Object2{Name="o2", Ref=2},
new Object2{Name="o3", Ref=1},
new Object2{Name="o4", Ref=2},
new Object2{Name="o5", Ref=5},
new Object2{Name="o6", Ref=3},
new Object2{Name="o7", Ref=5}
};
List<Object1> listObject1 = arr.Where(p => p.ID == 1 || p.ID == 2).ToList();
List<Object2> listObject2 = arr2.Where(p =>listObject1.Any(q => p.Ref == q.ID)).ToList();
}
class Object1
{
public string Name;
public int ID;
}
class Object2
{
public string Name;
public int Ref;
}
答案 3 :(得分:0)
我想出了我想要做的最好的方法。这是我需要的代码:
var NewObject = da.dbsetObject1.Include("listObject2").ToList();
然后我可以使用NewObject作为列表,当我需要一个与特定Object1值相关联的Object2值时,我可以抓住它。
以下是课程:
public class Object1
{
[Key]
public int Object1ID { get; set; }
.....
public int Object2ID { get; set; }
public List<Object2> listObject2 { get; set; }
}
public class Object2
{
[Key]
public int Object2ID { get; set; }
.....
public int Object1ID { get; set; }
public Object2 myObject2 { get; set; }
}
感谢大家的帮助!我希望lambda表达式工作起来看起来更干净,特别是一旦我开始添加更多包含。