我有一个“产品”表,其中包含相关的“Tegs”
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; }
}
这是Tegs:
public class Teg
{
public Teg()
{
}
public int Id { get; set; }
public string TegName { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
}
鉴于产品ID,使用LINQ我想检索所有至少有一个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的产品?
问题2: 如何将我的List嵌套在相关产品的Linq查询中?
答案 0 :(得分:0)
关于第一个问题,如果我理解正确,您希望从relatedProducts结果列表中排除具有给定productId的产品。在这种情况下,您只需要在Where()子句中再添加一个条件,如下所示:
IEnumerable<Product> relatedProducts = db.Product
.Include(u => u.Tegs)
.Where(p => p.Tegs.Any(t => tegid.Contains(t.Id)) && p.Id != id);
关于你的第二个问题,我不太清楚这里的重点是什么。也许您打算将单个往返中的第二个和第三个查询合并到db?