首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写Linq-to-Entities查询

编写Linq-to-Entities查询
EN

Stack Overflow用户
提问于 2011-11-14 21:55:47
回答 2查看 156关注 0票数 1

我是LINQ和Entity Framework的新手,我被困在我试图编写的特定查询上。我有一个具有以下结构的数据库。为了简单起见,我只包含了与问题相关的文件和字段。

代码语言:javascript
复制
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查询。

我希望我已经正确地解释了我的问题。如果我错过了什么,请告诉我。

谢谢你,阿比。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-14 22:25:20

你试过这样的东西吗?

代码语言:javascript
复制
var results = SCMSKUFILEs.Where(a => a.SCMSHIPPINGDETAILs.Any(d => d.SHIPMASTs.Any(m => m.DELIVERYDATE != null)));

我不确定它是否值得使用嵌套的ANY,但值得一试。

你也可以从另一个方向,像这样...

代码语言:javascript
复制
var results = SHIPMASTs.Where(m => m.DELIVERYDATE != null)
    .SelectMany(m => m.SCMSHIPPINGDETAILs)
    .SelectMany(d => d.SCMSKUFILEs)
    .Distinct();
票数 0
EN

Stack Overflow用户

发布于 2011-11-14 22:26:11

在不深入了解表的结构的情况下,您似乎正在寻找一个查询,该查询根据父结果的某些子项(DELIVERYDATE不等于null)的属性来限制父结果(SCMSKUFILE)。LINQ使用量词"Any“和"All”来表示这样的查询,例如:

代码语言:javascript
复制
edm.Parents.Where(p => p.Children.Any(c => c.DeliveryDate != null));

这可能不会转换为您心目中的确切SQL查询,但它应该可以工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8122623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档