2009-07-10 20 views
0

LINQ to Entityモデルに問題があります。私はC#とLINQの両方に慣れています。多対多の関係で値の配列を検索するにはどうすればよいですか?

私は、各画像は、多くのタグを持つことができる写真やタグを含むモデルを、持っている、と各タグは、多くの写真にすることができます。データベースには通常の関係テーブルがありますが、オブジェクトモデルでは、これをpicture.tags(リスト)とtag.pictures(リスト)と見なします。検索クエリにはいくつかのタグが含まれています。検索の結果は、検索したすべてのタグ(ただし多分)でタグ付けされたすべての画像を含むことになります。検索するタグの数は固定されていません。

はどのようにこのベストを行うことができますか?

答えて

0

これを実行する方法はたくさんあります。ここには一つの方法があります。私はそれが「最高」であると主張するつもりはないが、うまくいく。

IQueryable<Picture> FindByTags(IEnumerable<string> tags) 
{ 
    var q = Context.Pictures; 
    foreach (var tag in tags) 
    { 
     q = q.Where(p => p.Tags.Any(t => t.Name == tag)); 
    } 
    return q; 
} 
0

hmm '

私が動作するように二行目、Contex.Picturesを得るように見える傾けます。それは許されません。そして、私が見る限り、このアルゴリズムは、すべてのタグに一致する画像だけでなく、少なくとも1つのタグに一致するすべての画像を追加しますか?または私は間違っていますか?

0
IQueryable<Picture> FindByTags(IEnumerable<string> included, IEnumerable<string> excluded) 
{ 
     return (from p in context.Pictures 
       where (from item in p.Tags 
        where included.Contains(item.Tag) 
        select 1).Count() == included.Count() 
       where (from item in p.Tags 
        where excluded.Contains(item.Tag) 
        select 1).Count() == 0 
       select p); 
} 

これも除外されていますが、除外されています。必要がない場合は2番目の部分を取り出してください。これは、画像に重複タグがない場合にのみ有効です。

関連する問題