0

次のコードを使用すると、ID で異なるレコードが取得されません。どうしてこれなの?

List<string> products = new List<string>();
products.Add("13CONV");
products.Add("12CONV");
products.Add("11CONV");
products.Add("10CONV");
products.Add("09CONV");
products.Add("08CONV");
products.Add("07CONV");

var predicate = PredicateBuilder.True<Services>()
                                .And(m => products.Contains(m.Service));

var Results = from d in Services.Distinct()
                                .Where(predicate )
              select d.ID;

データベース テーブル (サービス) は次のとおりです。

ID         Service
==
400        13Conv
401        13Conv
400        12Conv
400        07Conv
400        11Conv

上記のデータを使用すると、2 と予想されるレコード数が 5 になります。

ID フィールドは、DB 内の文字列です。

4

2 に答える 2

2

DistinctはないDistinctByKey(そのようなメソッドは LINQ 内に存在しない) ため、行内のすべての値が等しいかどうかがチェックされます。そのチェックでは、どの行も等しくありません。そのため、それらはすべてクエリによって返されます。

ところで、データベースはどの行をKey返す必要があるかをどのように決定できますか?

のみを受信しようとしてIDいて、それらが異なる必要がある場合は、次のクエリを試してください。

var results = Services.Where(predicate).Select(s => s.ID).Distinct().ToList();

アップデート

this oneのような質問によると、LINQ to Entites には既知の問題がありDISTINCTます。代わりにそのクエリを試してください:

Services.Where(predicate).GroupBy(s => s.Id).Select(g => g.Key).ToList();
于 2013-03-15T21:12:20.057 に答える
1

Serviceサービス ID (または名前) ではなく、オブジェクトの個別のリストが必要だと伝えました。

私はプログラムで述語を構築することに慣れていませんが、次のようなことをすると思います:

var Results = (from d in Services.Where(Predicate)
               select d.ID).Distinct();
于 2013-03-15T21:16:13.580 に答える