在Linq TO SQL C#中选择特定的子记录

本文关键字:记录 选择 Linq TO SQL | 更新日期: 2023-09-27 18:20:52

我有一个表,比如Category,包含以下字段:

cat_id、cat_name和cat_desc

我还有另一个具有以下字段的表格产品:

pro_id、cat_id、pro_name和pro_desc,is_finished

通常,如果我选择一个带有Linq-to-sql的类别,它会返回带有所有相关产品的类别。

但我想选择一个类别,但返回的产品应该是唯一一个is_finished值为true的产品。

任何建议/代码示例都将不胜感激。

在Linq TO SQL C#中选择特定的子记录

您需要加入表:

select * from product p
left join Category c on c.cat_id = p.cat_id
where c.cat_name = 'yourcategory' and p.is_finished = 1

在linq到SQL:中

var query = from product in products
            join category in categories on category.cat_id = product.cat_id
            select new { product.is_finished = true, category.cat_name = "yourcategory" };

这可能是实现您所要求的最明智的方法:

var query = from product in products
            select new {
                product, 
                finishedCategories = product.categories.Where(c => c.is_finished)
            };

这将创建一个包含您要查找的数据的匿名类型。请注意,如果您访问.product.categories,您仍然可以获得该产品的所有类别(延迟加载)。但如果你使用.finishedCategories,你只会得到已经完成的类别。