0

この Lambda ステートメントを使用して、詳細を持つヘッダーのみを取得しようとしています

list = list.Where(c=> c.CustomerSalesPeople.Count>0);

しかし、結果を返そうとするとnull例外が発生します

return list.OrderBy(c => c.CustomerName).ToList();

コードをステップ実行したところ、最初のステートメントを実行した直後に null 例外が生成されていることがわかりました。これを達成するためのより良い方法はありますか。

編集

私は提案を試みましたが、まだnull値を取得していました。もっとうまく説明しようと思いました。このクエリに一致する Lambda 式が必要です

    SELECT *
  FROM [customer]
  where customer_record_id in (select distinct(customer_id)from customer_sales_person)
4

2 に答える 2

1
list = list.Where(c=>c.CustomerSalesPeople.Count>0).SingleOrDefault();

if(list!=null)
  return list.OrderBy(c=>c.CustomerName).ToList();

return list;

または、CustomerSalesPeoplenull になる可能性があると思われる場合は、これを行うことができます。

list = list.Where(c=>(c.CustomerSalesPeople==null) ||(c.CustomerSalesPeople.Count>0));

if(list!=null)
  return list.OrderBy(c=>c.CustomerName).ToList();

return list;

.DefaultIfEmpty()また、拡張子を見ることもできます。

Linq は、空の結果セットが見つかった場合に対処するための優れた拡張メソッドを提供します。どうぞ:

  1. .FirstOrDefault()
  2. .DefaultIfEmpty()
  3. .SingleOrDefault()

アップデート:

これを行う:

   List<int> uniqueIds= listOfCustomerSalesPerson.Select(s=>s.Id).ToList().Distinct();
   var requireListOfCustomers = GetAllCustomers().Where(s=>uniqueIds.Contains(s.id);

ただし、これら 2 つの個別の呼び出しを 1 つに埋め込むこともできます。ただし、使用しているデータ プロバイダーの種類によっては、"プリミティブ型のみを使用" のようなエラーが表示される場合があります。

たとえば、EntityFramework 5.0 と SQL Server を使用している場合、これを行うことができます。

myDbContext db= new myDbContext();
var requiredList = db.Customers.Where(s=>
                               (s.CustomerSalesPeople ==null)
                               ||
                               (s.CustomerSalesPeople.Select(o=>o.Id).Contains(s.Id))
                               ).ToList();

私は、顧客が含む、それ以外List<CustomerSalesPeople>の可能性があると仮定しましたdb.CustomerSalesPeople

于 2013-02-25T07:38:04.563 に答える
0

コレクションに null 要素を含めることができます。whereステートメントでヌルをチェックしてみてください

return list != null ? 
   list.Where(c=> c!=null && c.CustomerSalesPeople.Count>0).
   OrderBy(c => c.CustomerName).ToList()
   :null;
于 2013-02-25T07:38:34.373 に答える