私はメインのクエリを注入するために条件を2つ以上持っていますが、条件に値がない場合(nullableの場合)、私はクエリに注入したくありません。Entity Framework linqクエリでOR条件を挿入する方法は?
たとえば、これは私のANDクエリ注射である:
// first initialize query can have where or not
var query = context.QuestionInfoes.Include(x =>x.RelationsInfoes).AsQueryable();
// first if condition to inject query
if (filterQuestionInfo.ToProfileId.HasValue)
{
query = (from q in query
join qr in context.QuestionRelationsInfoes on q.Id equals qr.QuestionId
where q.BrodcastType == QuestionBrodcastType.All || filterQuestionInfo.ToProfileId == qr.ToProfileId
select q);
}
// second if condition to inject AND query and i want to this be OR injection
if (filterQuestionInfo.ProfileId.HasValue)
{
query = (from q in query
where q.ProfileId == filterQuestionInfo.ProfileId
select q);
}
は、今私は、注射を作成する「OR」にしたいと私は.ToList()
を呼び出すときに、私はちょうど私が必要なSQLで問い合わせる参照してください。上の例では、ToProfileId
とProfileId
の値がある場合、2番目のクエリは最初のクエリの "And"条件であるため、ToProfileId
の値と0の質問をProfileIdの値の0質問に送信しました。しかし、私は両方の値を記入すると、両方の値が必要になります。
二つの値がnullです:ToProfileIdかのプロファイルIDの一つの値がnullのとき、私は質問のすべて(機能するようになりました)
をフィルタ:私はその価値に疑問のすべてをフィルターヌル(作品ではありません今)
両方の値が満たされている、私は質問リストの両方をしたい(現在は動作しません)
注:私は1つのクエリAを作成する必要はありませんその条件にすべての条件を挿入してください。
代わりに「=」あなたの2番目のクエリquery.Add(........)が必要です。後でフィルタリングして重複をなくすことができます。 – jdweng
再生のために、query.Addとは何ですか? –
最初のクエリ(.....から)をToList()に追加すると、2番目のクエリを追加できます。 – jdweng