C# 在单个查询中返回相关元素(我的查询是否错误?)

C# 在单个查询中返回相关元素(我的查询是否错误?),c#,entity-framework,entity-relationship,C#,Entity Framework,Entity Relationship,嘿,我有一个叫做products的表,它本身就有关系。此表存储产品及其子产品,然后存储子产品。当用户搜索最顶级的产品时,此查询应返回父项、子项及其子项的子项。现在,我的查询可以工作了,但我对实体框架和SQL一般来说是新手,所以我不确定这是否应该是这样做的。为了让事情更复杂一些,我在表中搜索多个字段 else { productQuery = from b in solutionContext.Ver

嘿,我有一个叫做products的表,它本身就有关系。此表存储产品及其子产品,然后存储子产品。当用户搜索最顶级的产品时,此查询应返回父项、子项及其子项的子项。现在,我的查询可以工作了,但我对实体框架和SQL一般来说是新手,所以我不确定这是否应该是这样做的。为了让事情更复杂一些,我在表中搜索多个字段

else
            {
                productQuery = 
                    from b in solutionContext.Version
                    where 
                        (
                            b.Product.Name == search || b.Product.Description == search ||
                            b.Product.Product2.Name == search || b.Product.Product2.Description == search ||
                            b.Product.Product2.Product2.Name == search || b.Product.Product2.Product2.Description == search
                        )
                    orderby b.Product.LastNumber ascending
                    select b;
            }
为了澄清,Product2是从子对象到父对象的关系


子问题:将来我想搜索一个孩子,返回它的父母,以及父母的父母。我现在要做的是添加一些lambda表达式,然后做我所做的,但是要提升关系。这很聪明吗?

这个查询没有什么问题。当然,L2E中需要访问相关成员

考虑使用如下语法:

b.Product.Name.Equals(search, StringComparison.OrdinalIgnoreCase)

搜索通常不区分大小写。

此查询没有任何问题。当然,L2E中需要访问相关成员

考虑使用如下语法:

b.Product.Name.Equals(search, StringComparison.OrdinalIgnoreCase)

搜索通常不区分大小写。

谢谢,感谢您的反馈。我知道我的查询是有效的,但由于我是L2E新手,我只想确保我没有做错事或效率低下。我喜欢这种语法,肯定会考虑使用它。有一件事需要注意的是,L2E合并空,但L2O不。因此,在您的示例中,如果
b.Product
为null,那么比较将返回
false
,而不是抛出null引用异常。这就像SQL一样。谢谢,我很感谢你的反馈。我知道我的查询是有效的,但由于我是L2E新手,我只想确保我没有做错事或效率低下。我喜欢这种语法,肯定会考虑使用它。有一件事需要注意的是,L2E合并空,但L2O不。因此,在您的示例中,如果
b.Product
为null,那么比较将返回
false
,而不是抛出null引用异常。这就像SQL那样。