0

我想填充一个列表,其中对象中的值位于我已经填充的另一个列表中。请看下面:

//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();

我知道 contains 不起作用,但我想基本上用所有具有匹配 Object1ID 的值填充 listObject2。在 sql 表中,这将是一个外键关系。

4

4 回答 4

4

然后join是两个列表:

var results = from l2 in listObject2
              join l1 in listObject1 on l2.ID equals l1.Object1ID
              select new{anonymous type}
于 2012-07-09T14:39:20.683 回答
3

编辑

基于评论中的更新信息

var lstObject1 = listObject1.Select(item -> item.ObjectId).ToArray();  
List<Object2> listObject2 = da.dbsetObject2.Where(p=> lstObject1.Contains(p.ObjectId)).ToList();

原来的

从代码中问题不清楚

假设,您不能 p.ID 在列表中,结果查询是

  List<Object2> listObject2 = da.dbsetObject2.Where(p=> listObject1.Contains(p.ID)).ToList();
于 2012-07-09T14:45:27.933 回答
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;
    }
于 2012-07-09T14:45:02.167 回答
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 表达式能够工作它看起来更干净,尤其是当我开始添加更多包含时。

于 2012-07-09T16:53:52.660 回答