2016-03-25 9 views
0

私は "製品" テーブルを持っている。これは、テグスである "テグス"LINQ - 関連データと照会表

public class Product 
{ 
    public Product() 
    { 
     Tegs = new List<Teg>(); 
    } 
    [Key] 
    public int Id { get; set; } 
    public string ProductName { get; set; } 
    public virtual ICollection<Teg> Tegs { get; set; } 
    public virtual ICollection<Product> RelatedProducts { get; set; } 
} 

に関連しています

製品考える
public class Teg 
{ 
    public Teg() 
    { 

    } 

    public int Id { get; set; } 
    public string TegName { get; set; } 

    public virtual ICollection<Product> Products { get; set; } 
} 

}

ID、LINQを使用して、私は選択された製品として少なくとも1つのtegを持つすべての製品を取得したいと思います。

私はこのコードを使用しています:

Product product = db.Product.Include(u => u.Tegs).Where(u => u.Id == id).Single(); 
List<int> tegid = product.Tegs.Select(c => c.Id).ToList(); 
IEnumerable<Product> relatedProducts = db.Product.Include(u => u.Tegs).Where(p => p.Tegs.Any(t => tegid.Contains(t.Id))); 

質問1: 私はIDとrelatedProductsから製品を除外することができますどのように?

質問2: relatedProductsのLinqクエリ内でリストをネストする方法はありますか?

答えて

0

最初の質問では、私が正しく理解していれば、関連商品の結果リストから特定の商品IDを持つ商品を除外したいと考えています。あなたはこのようなあなたの()句にもう一つの条件を追加する必要があります。この場合:

IEnumerable<Product> relatedProducts = db.Product 
        .Include(u => u.Tegs) 
        .Where(p => p.Tegs.Any(t => tegid.Contains(t.Id)) && p.Id != id); 

そして、あなたの2つ目の質問について、私は、ポイントはここに何かなりよく分かりません。おそらく、dbへの1回のラウンドトリップで2番目と3番目のクエリを組み合わせるつもりだったでしょうか?

関連する問題