2013-04-10 116 views
0

我有以下设置:LINQ到实体连接查询

ShoeAreas有列ShoeIdMaterialId。 表Shoes具有列IDStatus

我有一个方法需要一个参数 - materialId,目标是确定ShoeAreas中是否有记录,其中MaterialId等于像参数那样传递的记录。并且如果这样的记录(或者最有可能的记录)存在,如果它们相信从Shoes with状态'=生产'。

我尝试这样做:

return shoeService.All(). 
       Join(shoeAreaService.All(), 
       s => s.ID, 
       sa => sa.ShoeId, 
       (s, sa) => (sa.MaterialId == matId)). 
       Any(s => (s.Status == (byte)EntityStatusProd.Production))); 

但我得到了Any..行错误说} expected,也这是我第二次LINQ到实体查询我写的,所以我怀疑,如果是语法问题或查询自己错了。

+1

有适当的实体,您应该能够使用导航属性,而不是加入的。 – MarcinJuraszek 2013-04-10 07:01:13

回答

1

您正在从Join方法(条件为sa.MaterialId == matId的值)返回IEnumerable<bool>。创建匿名类型将举行双双加盟实体,而不是:

return shoeService.All() 
      .Join(shoeAreaService.All(), 
       s => s.ID, 
       sa => sa.ShoeId, 
       (s, sa) => new { s, sa }) // here 
      .Any(x => (x.sa.MaterialId == matId) && 
        (x.s.Status == (byte)EntityStatusProd.Production))); 
+0

谢谢,会用你的答案。 – Leron 2013-04-10 07:16:51

1

你可以试试这个:(LINQ)

from shoe in Shoes 
join shoeArea in ShoesArea on shoe.ID equals shoeArea.ShoeID 
where shoeArea.MeterialID == matID && shoe.Status == (byte)EntityStatusProd.Production 
select new {shoe.ID,shoe.Status}; 
1
return shoeService.All().Any(s => shoeAreaService.All() 
           .Any(sa => sa.MaterialId == matId 
             && s.Id == sa.ShoeId) 
          && s.Status == (byte)EntityStatusProd.Production); 
+1

谢谢,太好了! – Leron 2013-04-10 07:17:09