0

私はc#を使用してLINQとMSSQLを使用しています。レコードのフェッチで問題が発生しています。2つのテーブルがあります。SalesTransactionsSalesの主キーはTransactionsテーブルによって参照されています。データは次のようになります。 ここに画像の説明を入力してください

私がやろうとしているのは、金額が!= 0のすべてのレコードをフェッチすることです。この例では、結果にはSales2とSales3のみが含まれ、Sales1は含まれていません。Sales1が閉鎖されているため。

私は次のようなクエリを作成しました

List<Sales> lstSales = (from ccs in context.Sales
                        join transactions in context.Transactions 
                             on ccs.SALESID equals  transactions.SALESID            
                        where transactions .AMOUNT !=0 
                       select ccs).ToList();

Sales1に対する1行の場合、金額!= 0であるため、3つのSalesレコードすべてが返されます。

望ましい結果を達成するために私を導いてください。

よろしくお願いします、Vijay

4

2 に答える 2

0

クエリはクローズされたトランザクションを除外しますが、それでも結果に 0 件以上のトランザクションがあるため、Sales1 ID を取得できます。

代わりにこれを試してください (私はこれをテストしていませんが、動作するはずです)。

IEnumerable<int> closedIds = context.Transactions.Where(t => t.Amount == 0).Select(t=> s.SalesId);
List<Sales> sales = context.Sales.Where(s => !closedIds.Contains(s.SalesId));

別のアプローチは次のとおりです (コンテキスト内で Sales と Transaction の間に関連付けがあると仮定します)。

List<Sales> sales = context.Sales.Where(s => !s.Transactions.Any(t=> t.Amount == 0));
于 2012-09-12T06:19:24.313 に答える
-2

これらのいずれかを利用してください。

Enumerable.Any Enumerable.All

于 2012-09-12T05:54:18.303 に答える