-3

クエリに問題があります。私は2つの簡単なクラスを持っています。まあ言ってみれば

public class A{
  public List<B> MyCollection{get; set;}
}
public class B{
 public string Id;
}
//I want to do something like that
var myB = new B{Id="1"};
context.A.Where( x=> x.MyCollection.Contains(myB)).ToList();

どうすればこれを解決できますか? 私は次のようなことができることを知っています

context.A.ToList().Where...

しかし、それは良い考えではありません。特に、数千のレコードがある場合はなおさらです。

アップデート!context は EntityFramework コンテキストであり、 context.A は DbSet を表します 「LINQ to Entities はメソッド 'Boolean Contains' を認識しません」というエラーが引き続き表示されますが、使用できません

context.A.ToList().Where(....

何千ものレコードがあり、非効率になるため

4

3 に答える 3

2

これは私のために働いた:

public class A
{
    public List<B> MyCollection{get; set;}
}

public class B
{
     public string Id;
}

void Main()
{

    // this is what you're searching for
    var myB = new B{Id="1"};


    // here are some A objects to put in your collection
    A a1 = new A();
    a1.MyCollection = new List<B>();
    A a2 = new A();
    a2.MyCollection = new List<B> { myB };
    A a3 = new A();
    a3.MyCollection = new List<B> { new B {Id="1"}};


    // here's a List that represents your context.A
    List<A> contextA = new List<A> {a1, a2, a3};


    // here's your actual search. results has a count of 1
    var results = contextA.Where( x=> x.MyCollection.Contains(myB));
    Console.WriteLine(results.Count()); 
}

文字通りオブジェクト「myB」をそこに置くため、これはa2のみを見つけることに注意してください。同じ ID で作成された新しいオブジェクトである a3 は見つかりません。

a2 と a3 の両方を見つけたい場合は、おそらく Where を次のように変更する必要があります。

var results = contextA.Where( x=> x.MyCollection.Any(b => b.Id == myB.Id));
于 2013-05-14T20:48:02.927 に答える
1
var ans = from b in context.A.MyCollection
          where b.Id == 1
          select b;

また

var ans = context.A.MyCollection.Where(b => b.Id == 1);
于 2013-05-14T20:27:59.310 に答える
0

これを試しましたか

context.A.MyCollection.Where( x= > x.Id == myB.Id).ToList();
于 2013-05-14T20:27:39.980 に答える