2013-03-30 45 views
0

我真的使用实体Framwork和我有一个投影:LINQ到实体 - 加入多contidions

 var items = from mapsDsc in DbContext.MapsDesc 
        join mapCat in DbContext.MapsCategories on mapsDsc.MapID equals mapCat.MapID 
        join mainCat in DbContext.MainCategories on mapCat.MainCategory equals mainCat.MainCatID 
        join subCat in DbContext.SubCategories on mapCat.SubCategory equals subCat.SubCatID 
        select new DataModel.ComplexEntities.MapsDescExt 
        { 
         MapID = mapsDsc.MapID, 
         MapName = mapsDsc.MapName, 
         MapLink = mapsDsc.MapLink, 
         Note = mapsDsc.Note, 
         MainCategoryID = mapCat.MainCategory, 
         MainCategoryName = mainCat.Category, 
         SubCategoryID = mapCat.SubCategory, 
         SubCategoryName = subCat.Category 
        }; 

请注意,此投影填充强类型,而不是匿名的。 我需要定制这个投影,但我不知道如何。

在我的最后一个加入我需要执行下一个条件“或”运算符:

join subCat in DbContext.SubCategories on mapCat.SubCategory equals subCat.SubCatID or subCat.SubCatID equals "0" 

我该怎么办呢?我所看到的所有例子都与匿名类型有关,对我并不好。 感谢

回答

0

你不通过手动where使用联接语法,你可以这样做,然后在一个额外的条件溜:

var items = from mapsDsc in DbContext.MapsDesc 
      join mapCat in DbContext.MapsCategories on mapsDsc.MapID 
               equals mapCat.MapID 
      join mainCat in DbContext.MainCategories on mapCat.MainCategory 
               equals mainCat.MainCatID 
      from subCat in DbContext.SubCategories 
/* here */ where mapCat.SubCategory == subCat.SubCatID || subCat.SubCatID == "0" 
      select new DataModel.ComplexEntities.MapsDescExt 
      { 
      ... 

(注意mapCat.SubCategory应该是一个ID字段,你可能知道哪个)。

+0

谢谢阿诺德。 我会在几个小时内尝试它,并报告它是否有效,并且是(mapCat.SubCategory是id字段) – Ofir

+0

查询有点不同,但您的语法是我需要的。现在它正在工作,谢谢 – Ofir