繁体   English   中英

将多对一谓词添加到LINQ-to-SQL查询

[英]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 ,并且您可以从ProductTag选择数据。

请注意,这不一定是不同的产品列表。

如果标签直接存储在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM