Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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写入实体查询_C#_C# 4.0_Entity Framework 4_Linq To Entities_Edmx - Fatal编程技术网

C# 将Linq写入实体查询

C# 将Linq写入实体查询,c#,c#-4.0,entity-framework-4,linq-to-entities,edmx,C#,C# 4.0,Entity Framework 4,Linq To Entities,Edmx,我是LINQ和实体框架的新手,我被困在一个我正试图编写的特定查询上。 我有一个如下结构的数据库。为了简单起见,我只包含了与问题相关的文件和字段 Table: SCMPOFILE Columns: POKEY PONUMBER ... Table: SCMSKUFILE SKUKEY POKEY - Foreign Key on SCMPOFILE.POKEY ..... Table: SCMSHPMAST SHIPKEY DELIVERYDATE ..... Table: SCMS

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

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不为空的所有SKU(SCMSKU文件)。正如我定义的外键一样,生成的模型会自动带来SCMSHIPPINGDETAILs以及与之关联的每个SCMSKU文件(以及附加到每个SCMSHIPPINGDETAIL的SCMSHPMAST)。我可以对所有单独的文件进行连接以获得我想要的结果,但是我想使用LINQ和实体框架生成的模型来实现这一点

我正在尝试这样做:- 选择所有SCMSKU文件,其中SCMSHIPPINGDETAILs的SCMSHPMAST的DELIVERYDATE不等于null

这是可以使用单个LINQ查询完成的吗?我已经挠头了很多次,但我无法编写LINQ查询

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

谢谢,
阿比。

你试过这样的东西吗

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();

在不深入研究表结构的情况下,您似乎在寻找一个查询,该查询基于父结果(SCMSKUFILE)的某些子结果的属性(DELIVERYDATE不等于null)来限制父结果。LINQ使用量词“Any”和“All”来表示此类查询,例如:

edm.Parents.Where(p => p.Children.Any(c => c.DeliveryDate != null));

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

谢谢Scott。两种选择都非常有效!!!你能推荐一些好的资源来提高我在LINQ上的技能吗?StackOverflow一直是我的一个很好的资源。在这两者之间,只要在项目中积极使用LINQ,就不会太糟糕了。我刚开始阅读MS 70-516考试培训工具包-所以不确定这是否有什么好处。谢谢史蒂夫的帮助。希望我能很快适应LINQ。阿比。