私はシミュレートしようとしています:
WHERE x.IsActive = true または x.Id = 5
以下では、'AND' が使用されます... IQueryable (qry) と null 許容 int を使用して 'OR' 条件をシミュレートするにはどうすればよいですか?
if (onlyActiveItems) //bool
{
qry = qry.Where(x => x.IsActive == true);
}
if (whenSpecifiedMustIncludeRecordWithThisId.HasValue) //int?
{
qry = qry.Where(x => x.Id == whenSpecifiedMustIncludeRecordWithThisId.Value);
}
私はユニオンを検討しましたが、これに対する答えはもっと簡単なはずです。
これは、すべてを1つの回答にまとめようとするときに「Nullableオブジェクトには値が必要です」という問題を回避する1つの解決策です。それ以外の場合、null の場合に nullable が評価される原因は何ですか?
if (whenSpecifiedMustIncludeRecordWithThisId.HasValue)
{
qry = qry.Where(x => (!onlyActiveItems || (onlyActiveItems && x.IsActive)) || x.Id == whenSpecifiedMustIncludeRecordWithThisId.Value);
}
else
{
qry = qry.Where(x => (!onlyActiveItems || (onlyActiveItems && x.IsActive)));
}
また、場合によっては、nullable の .Value プロパティを使用すると、私の別の質問で見られるように違いが生じるようです。Linq to SQL Int16 Gets Converted as Int32 In SQL Command