1

私は現在、次のようなクエリを取得しています (疑似コードはこちら!)。

var query = p.Companies.Any((a => a.Name != "" || a.Name.Contains(variable1) &&
                            (a => a.Description != "" || a.Description.Contains(variable2));

さて、明らかに、これは私がやろうとしていることの単純化されたバージョンであり、チェックするフィールドが他にもたくさんありますが、私の答えの基本は、次のように構築された関数/式を作成できますか?必要な SQL だけを生成しますか?

そのような:

Expression<Func<Company, bool>> companyQuery;
if(!String.IsNullOrEmpty(variable1)) {
   // build up my expression
}

// Pass expression through to query when finalized

これについて何かアイデアはありますか?ありがとう!

4

2 に答える 2

5

おそらくその必要はありません。データベースがクエリを実行する前に最適化することを信頼できるので、問題になることはまずありません。

そうは言っても、あなたならできるし、それほど難しいことでもない。(ただし、式が OR セマンティクスと組み合わされている場合は、もう少し手間がかかります。

IQueryable<Company> query = p.Companies.AsQueryable();

if(!string.IsNullOrEmpty(variable1))
    query = query.Where(company => company.Name != "" || company.Name.Contains(variable1));

if(!string.IsNullOrEmpty(variable2))
    query = query.Where(company => company.Description != "" || company.Description .Contains(variable1));

bool result = query.Any();

これは、高度な検索画面でよく使用されるパターンです。このフィールドで検索している場合は、このフィールドでフィルター処理し、このフィールドでフィルター処理していない場合は含めないでください。

于 2013-01-10T15:25:07.637 に答える
1

IQueryableクラスを使用してオンデマンドでクエリを作成できます。次に例を示します。

IQueryable<Company> query = p.Companies;

if (condition1)
{
    query = query.Where(expression1);
}

if (condition2)
{
    query = query.Where(expression2);
}
于 2013-01-10T15:25:58.453 に答える