Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Linq TO SQL C中选择特定的子记录#_C#_Linq To Sql - Fatal编程技术网

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

C# 在Linq TO SQL C中选择特定的子记录#,c#,linq-to-sql,C#,Linq To Sql,我有一个包含以下字段的表类别: 类别id、类别名称和类别描述 我还有另一个具有以下字段的表格产品: pro_id、cat_id、pro_name和pro_desc是否已完成 通常,如果我选择一个具有Linq to sql的类别,它将返回包含所有关联产品的类别 但我想选择一个类别,但返回的产品应该是唯一具有“is_finished”值且为真的产品 欢迎提供任何建议/代码示例。您需要查看以下表格: select * from product p left join Category c on c.c

我有一个包含以下字段的表类别:

类别id、类别名称和类别描述

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

pro_id、cat_id、pro_name和pro_desc是否已完成

通常,如果我选择一个具有Linq to sql的类别,它将返回包含所有关联产品的类别

但我想选择一个类别,但返回的产品应该是唯一具有“is_finished”值且为真的产品

欢迎提供任何建议/代码示例。

您需要查看以下表格:

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
,您只会得到已完成的类别。

您不想将其设置为True,或者只得到一个为True的类别吗?我想得到一个包含关联产品的类别,该类别的完成值为True。您是否在寻找至少有一个完成产品的所有类别?在这种情况下,请查看Any运算符或向您查询您的响应,但我没有使用内嵌式sql,我正在寻找一种使用linq to sql对象实现此功能的方法。@ElGavilan:您的linq与您的sql不匹配。您使用的是
select
语句,您应该在其中使用
where
语句。我理解并非常感谢您的回答。显然,我要求的太多了,因为我想修改的product.categories(产品类别)本身已经完成了,我想修改的那些带有true的产品类别已经完成了。@Al Mustapha这个答案和我留下的答案都是这样做的。这可能是最好的方法。我不太确定这种脱节在哪里…@阿尔·穆斯塔法:你要求做的事情可能是个坏主意,仅此而已。假设您将一个
产品
传递到某个helper方法中,该helper方法需要处理产品的所有类别:它无法知道特定的
产品
是否以“特殊”方式加载,因此只存在其某些类别。相反,重新考虑您的设计,并愿意在这种情况下引入DTO层。从长远来看,您的代码不太容易出错,并且更易于维护。