0

私は LINQ to Entity モデルに問題があります。私は C# と LINQ の両方が初めてなので、ご容赦ください。

写真とタグを含むモデルがあり、各写真には多くのタグを付けることができ、各タグは多くの写真に付けることができます。データベースには通常のリレーション テーブルがありますが、オブジェクト モデルでは、picture.tags (リストとして) および tag.pictures (リストとして) として表示されます。検索クエリにはいくつかのタグが含まれており、検索の結果には、検索したすべてのタグ (またはそれ以上のタグ) でタグ付けされたすべての画像が含まれます。検索するタグの数は固定されていません。

どうすればこれを行うことができますか?

4

3 に答える 3

0

うーん。'

2行目のContex.Picturesを機能させることができないようです。コンテキストはそれを許可しません。そして、私が見る限り、このアルゴリズムは、すべてのタグに一致する画像だけでなく、少なくとも1つのタグに一致するすべての画像を追加しますか?それとも私は間違っていますか?

于 2009-07-11T13:30:58.320 に答える
0

これを行うには多くの方法があります。これが1つの方法です。それが「最高」だと主張するつもりはありませんが、うまくいくでしょう。

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;
}
于 2009-07-10T17:11:51.637 に答える
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 番目の場所を削除してください。これは、写真に重複したタグがない場合にのみ機能します

于 2010-06-01T19:09:21.383 に答える