我是LINQ和Entity Framework的新手,我被困在我试图编写的特定查询上。我有一个具有以下结构的数据库。为了简单起见,我只包含了与问题相关的文件和字段。
Table: SCMPOFILE
Columns:
POKEY
PONUMBER
...
Table: SCMSKUFILE
SKUKEY
POKEY - Foreign Key on SCMPOFILE.POKEY
.....
Table: SCMSHPMAST
SHIPKEY
DELIVERYDATE
.....
Table: SCMSHIPPINGDETAIL
SHPDTLKEY
SHIPKEY - Foreign Key on SCMSHPMAST.SHIPKEY
POKEY - Foreign Key on SCMPOFILE.POKEY
SKUKEY - Foreign Key on SCMSKUFILE.SKUKEY
......从结构中可以看到,一个发货关键字可以有多个发货详细信息关键字。同样,每个PO和sku可以有多个与之关联的发货关键字。
我正在尝试查找SCMSHPMAST.DELIVERYDATE不为空的所有skus (SCMSKUFILE)。正如我已经定义了外键,生成的模型自动带来SCMSHIPPINGDETAILs,每个SCMSKUFILE都与之关联( SCMSHPMAST附加到每个SCMSHIPPINGDETAIL)。我可以在所有单独的文件上进行连接,以获得我想要的结果,但我想使用LINQ和实体框架生成的模型来实现。
我正在尝试这样做:-选择所有SCMSHIPPINGDETAILs的SCMSHPMAST具有不等于null的DELIVERYDATE的SCMSKUFILEs。
这是可以使用单个LINQ查询来完成的吗?我已经抓了很多次头,但我不能写LINQ查询。
我希望我已经正确地解释了我的问题。如果我错过了什么,请告诉我。
谢谢你,阿比。
发布于 2011-11-14 22:25:20
你试过这样的东西吗?
var results = SCMSKUFILEs.Where(a => a.SCMSHIPPINGDETAILs.Any(d => d.SHIPMASTs.Any(m => m.DELIVERYDATE != null)));我不确定它是否值得使用嵌套的ANY,但值得一试。
你也可以从另一个方向,像这样...
var results = SHIPMASTs.Where(m => m.DELIVERYDATE != null)
.SelectMany(m => m.SCMSHIPPINGDETAILs)
.SelectMany(d => d.SCMSKUFILEs)
.Distinct();发布于 2011-11-14 22:26:11
在不深入了解表的结构的情况下,您似乎正在寻找一个查询,该查询根据父结果的某些子项(DELIVERYDATE不等于null)的属性来限制父结果(SCMSKUFILE)。LINQ使用量词"Any“和"All”来表示这样的查询,例如:
edm.Parents.Where(p => p.Children.Any(c => c.DeliveryDate != null));这可能不会转换为您心目中的确切SQL查询,但它应该可以工作。
https://stackoverflow.com/questions/8122623
复制相似问题