私はLINQの新機能で、いくつかのグループ名が '#'で区切られた 'Readers'という列を持つSQLビューをフィルタリングすることを検討しています(例:Administrators#HRグループ#従業員グループ ")。 ユーザーのグループのリストがあるため、ユーザーのグループの少なくとも1つが読者に含まれているすべてのレコードを抽出する必要があります。 つまり、ユーザーは彼に属するレコードのみを表示する必要があります。配列を比較するLINQクエリを作成する
私はこの解決策を見つけたが、私はそれが非常に非効率的だと思う:
private List<vwFax>getmyFaxes(List<string> myGroups)
{
var myFax = db.vwFax.AsQueryable();
var res = db.vwFax.AsQueryable();
List<vwFax> outRes= new List<vwFax>();
foreach (string elem in myGroups)
{
res = (from a in myFax
where a.Readers.Contains(elem)
select a);
if(res.Count() > 0)
{
outRes.AddRange(res);
}
}
return outRes.ToList();
}
任意のヘルプしてください?あなたは次のクエリで言っている基本的にはどのような
db.vwFax.AsQueryable()(a.Readers.Any(R => myGroups.Contains(R))は、Aを選択myFax中から)。 (x => myGroups.Any(y => x.Contains(y))。ToList(); LINQの代わりにストアドプロシージャを作成します。 – Valentin
1つの大きなクエリを実行するのではなく、 'myGroups.Count'というSQLクエリを実行しているため、' if(res.Count()> 0){outRes.AddRange(res);} 'の問題があるようです。上記のLINQクエリを使用すると、1つのクエリのみが実行されます。 – Valentin