3

エンティティの子オブジェクトを検索する where 句があります。

var Lookup = row.Offenses.Where(x => x.Desc == co.Desc && x.Action == co.Action && x.AppealYN == co.AppealYN && x.OffDate == co.OffDate).ToList();

co.OffDate例外が発生する null になる場合があります。現在、それを回避するために私が考えることができる唯一の方法は、if ステートメントを使用することです。

 if (co.OffDate.HasValue)
                                {
 var Lookup = row.Offenses.Where(x => x.Desc == co.Desc && x.Action == co.Action && x.AppealYN == co.AppealYN && x.OffDate == co.OffDate).ToList();
                                }
                                else
                                {
                                     var Lookup = row.Offenses.Where(x => x.Desc == co.Desc && x.Action == co.Action && x.AppealYN == co.AppealYN).ToList();
                                }

if ステートメントの機能を達成するために linq クエリを書き直すことはできますか? co.OffDateがnull であっても、ルックアップを行いたいです。

4

2 に答える 2

8

Where フィルターに 3 項を挿入できます。

var Lookup = row.Offenses
  .Where(x => 
    x.Desc == co.Desc 
    && x.Action == co.Action 
    && x.AppealYN == co.AppealYN 
    && (co.OffDate.HasValue ? x.OffDate == co.OffDate : true)
  ).ToList();
于 2012-09-19T18:22:51.640 に答える
3

もっと読みやすいように書き直します(私の意見では):

var query = row.Offenses.Where(x => x.Desc == co.Desc 
                                    && x.Action == co.Action 
                                    && x.AppealYN == co.AppealYN)
if (co.OffenseDate.HasValue)
{
  query = query.Where(x.OffDate == co.OffenseDate);
}

var Lookup = query.ToList();
于 2012-09-19T18:18:17.413 に答える