0

私はこのようなことをしようとしています:

from t in ent.myEntities
where SelectedProperties == null || SelectedProperties.Any(le => le == t.Entity)
select t

基本的に2つのケースをカバーしようとしています。空のリストを受け入れるか、すべてのエンティティを返すか、リストが提供されている場合はリストをフィルタリングする必要があります。

上記は、リストを指定すると実際に機能しますが、nullの場合は、次のようになります。

タイプ'System.Collections.Generic.List`1'の定数値を作成できません。このコンテキストでは、プリミティブ型('Int32、String、Guidなど')のみがサポートされます。

また、これを文字列配列で使用してみました。

where arr == null || arr.Contains(t.Entity)

述語を作成せずにそのような条件を持つことは可能ですか(これはより大きな努力です)?

4

2 に答える 2

1

より簡単な方法でリストを使用しててください。

where SelectedProperties == null || SelectedProperties.Contains(t.Entity)

うまくいかないかもしれませんが、試してみる価値はあります。それ以外の場合、これが本当にクエリ全体である場合は、次のように記述します。

var query = SelectedProperties == null 
            ? ent.myEntities
            : ent.myEntities.Where(t => SelectedProperties.Contains(t.Entity));

編集:さて、あなたがを使用する必要Anyがあり、これらをたくさん作成する必要がある場合は、次のように行うことができます:

var query = ent.myEntities;
if (SelectedProperties != null)
{
    query = query.Where(t => SelectedProperties.Any(x => x == t.Entity));
}
if (SomethingElse)
{
    query = query.Where(...);
}
// etc
于 2012-08-23T17:05:17.037 に答える
0

私はEF5を使用していますが、次のようなもので問題が解決します。

ent.myEntities.ToList().Where(t => SelectedProperties == null || SelectedProperties.Contains(t.Entity));
于 2014-08-26T09:21:09.697 に答える