[英]Add a many-to-one predicate to a LINQ-to-SQL query
如何在相关的多对多表上过滤IQueryable<T>
LINQ-to-SQL查询? 例如,给定一个IQueryable<Product>
,其中每个Product
都有许多存储在相关ProductTags
表中的标签,我想过滤一个或多个标签的关联。
Product
上的文档存储或逗号分隔值将使此操作更简单,但是数据存储在非规范化的SQL表中。
对于奖励积分,如果ProductTags
表只是一个映射表,并且我还需要从Tags
表中检索数据怎么办?
架构如下所示:
Products <-> ProductTags <-> Tags
更新:看起来我想针对EntitySet<T>
进行过滤。
如果您有一个标记名列表,例如tagNames
,则可以执行以下操作:
var query = from p in Products
from t in p.ProductTags.Select(pc => pc.Tag)
where tagNames.Contains(t.TagName)
select new { p.ProductName, t.TagName };
这将为您提供在tagNames
中至少具有标签之一的所有Product
,并且您可以从Product
或Tag
选择数据。
请注意,这不一定是不同的产品列表。
如果标签直接存储在ProductTags
,则查询更改为
var query = from p in Products
from t in p.ProductTags
where tagNames.Contains(t.TagName)
select new { p.ProductName, t.TagName };
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.