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、2 つのリスト:

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; }
}

助けてくれてありがとう!特にインクルードを追加し始めると、ラムダ式が機能していればよかったのにと思います。

于 2012-07-09T16:53:52.660 に答える