30

2つの簡単なクエリ-例外は次の場所で発生します:

matchings.Any(u => product.ProductId == u.ProductId)

なにが問題ですか?true私が代わりに書くなら、それはすべて良いです。

var matchings = (from match in db.matchings 
                 where match.StoreId == StoreId 
                 select match).ToList();

var names = (from product in db.Products
             where matchings.Any(u => product.ProductId == u.ProductId)
             select product).ToList();
4

4 に答える 4

52

最初の方法:

ToList()最初のクエリで削除します。

または

//instead of retrieving mathings List, retrieve only the productIds you need (which are a List of Primitive types)
var productIdList = db.matchings
.Where(m => m.StoreId == StoreId)
.Select(x => x.ProductId)
.ToList();

var products = db.Products
.Where(p => productIdList
           .Contains(p.ProductId))
.ToList();

または

//other way
var produts = db.Products
             .Where(p => db.matchings
                        .Any(m => m.StoreId == StoreId && 
                             m.ProductId == p.ProductId)
                    )
             .ToList();

あなたはlinq2entitiesにいて、クエリで一致リストを使用していると思いますが、これは不可能です(トピックのタイトルは、それがあなたの問題だと私に思わせる傾向があります)。

于 2012-06-02T13:06:30.890 に答える
7

これはjoinを使用する場所のように見えます

 var query =
    from product in db.Products
    join matching in db.Matchings
    on product.ProductId equals matching.ProductId into matchGroup
    where matchGroup.Count() > 0 and matching.StoreId == StoreId
    select product;
于 2012-06-02T13:12:46.113 に答える
3

コレクションテーブルとEFテーブルを使用して次のクエリを作成するときに、同じ問題に直面していました。

var result = (from listItem in list
              join dbRecord in Context.MY_TABLE
                  on listItem.MyClass.ID equals dbRecord.ID
              select new { dbRecord, listItem.SomeEnum }).ToList();

ソースの順序を変更することで解決できinます:

var result = (from dbRecord in Context.MY_TABLE
              join listItem in list
                  on dbRecord.ID equals listItem.MyClass.ID
              select new { dbRecord, listItem.SomeEnum }).ToList();
于 2014-09-08T21:07:58.700 に答える
1

次のことを試すことができます。これは、null許容型のProductIdosとして機能しました。

IQueryable<matchings> data = db.matchings.Any(u => product.ProductId.Value == u.ProductId);

またはこれ

IQueryable<matchings> data = db.matchings.Any(u => product.ProductId.Value.Equals(u.ProductId));

私の場合、ターゲットIDは1:0-> *の関係を指しているため、null許容型であるため、これは機能しました。

于 2012-10-17T14:10:41.890 に答える