2013-03-30 46 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