填充列表包含来自其他列表的值(或对象)

时间:2012-07-09 14:37:20

标签: c# .net sql linq entity-framework

我想填充一个列表,其中对象中的值位于我已经填充的另一个列表中。请参阅以下内容:

//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表中,这将是一个外键关系。

4 个答案:

答案 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表达式工作起来看起来更干净,特别是一旦我开始添加更多包含。