2017-06-16 40 views
1

我有一個問題,問題是我想要從該地區選擇所有的葡萄酒,我做了一些代碼,但他重複該地區總是我喜歡3種葡萄酒,他向我展示了3種葡萄酒,但分開,我選擇typeWine。Linq選擇地區,然後葡萄酒列表

的LINQ

public List<ZoneModel> GetRegion(int typeWine) 
     { 
      var query = (from m in db.Wine 
       join si in db.ImageWine on m.idWine equals si.idWine into f 
       join r in db.Region on m.idRegion equals r.idRegion 
       where m.idTypeWine == typeWine 
       select new ZoneModel() 
       { 
        Name = r.name, 
        Description = r.description, 
        ImageUrl = r.Image.urlImage, 
        BeveragesList = new List<BeverageModel>() 
        { 
         new BeverageModel() 
         { 
          Name = m.name, 
          ShortName = m.shortName, 
          Price = m.price, 
          Description = m.description, 
          AlcoholContent = m.alcoholContent, 
          Region = m.Region.name, 
          WineCaste = m.wineCaste, 
          UrlImageList = f.Select(i => _url + i.Image.urlImage).ToList(), 

       }}} 
       ).ToList(); 


      return query; 
     } 

返回JSON:

[{ 
    "Name": "Douro", 
    "ImageUrl": "douro.jpg", 
    "Description": "Douro Descrição", 
    "BeveragesList": [{ 
     "AlcoholContent": "12", 
     "Region": "Douro", 
     "WineCaste": "Castas", 
     "DishList": null, 
     "WineCategoryEnum": null, 
     "WineEnum": null, 
     "Id": null, 
     "UrlImageList": ["http://..net/Images/vinho1.jpg", "http://..net/Images/vinho2.jpeg"], 
     "Name": "Vinho Douro", 
     "ShortName": "Vinho Douro", 
     "Description": "Descrição Vinho", 
     "Price": "12" 
    }] 
}, { 
    "Name": "Douro", 
    "ImageUrl": "douro.jpg", 
    "Description": "Douro Descrição", 
    "BeveragesList": [{ 
     "AlcoholContent": "12", 
     "Region": "Douro", 
     "WineCaste": "Castas", 
     "DishList": null, 
     "WineCategoryEnum": null, 
     "WineEnum": null, 
     "Id": null, 
     "UrlImageList": ["http://..net/Images/vinho1.jpg"], 
     "Name": "Vinho douro2", 
     "ShortName": "Vinho douro2", 
     "Description": "Descrição", 
     "Price": "12" 
    }] 
}] 
+0

我認爲你必須每酒多張圖片。只要用葡萄酒做一個小組。 – Kyle

+0

等一下。 LINQ的這種風格(實體框架?)以及您獲得了哪些導航屬性? (比如:'Wine.WineImages'等)在大多數情況下,顯式'join'語句不是必需的。 –

+1

是的,實體框架。 – kroz

回答

0

沒有必要在大多數情況下都加入:

public List<ZoneModel> GetRegion(int typeWine) 
     { 
      var query = (from m in db.Wine 
       join r in db.Region on m.idRegion equals r.idRegion 
       where m.idTypeWine == typeWine 
       select new ZoneModel() 
       { 
        Name = r.name, 
        Description = r.description, 
        ImageUrl = r.Image.urlImage, 
        BeveragesList = new List<BeverageModel>() 
        { 
         new BeverageModel() 
         { 
          Name = m.name, 
          ShortName = m.shortName, 
          Price = m.price, 
          Description = m.description, 
          AlcoholContent = m.alcoholContent, 
          Region = m.Region.name, 
          WineCaste = m.wineCaste, 
          UrlImageList = m.ImageWines.Select(i => _url + i.Image.urlImage).ToList(), 

       }}} 
       ).ToList(); 


      return query; 
     } 

還是有GroupBy

from m in db.Wine 
group m.ImageWines by m.idWine into g 
join r in db.Region on m.idRegion equals r.idRegion 
select new { 
... 
UrlImageList= g.ToList() 
}; 
+0

我得到重複區域,我只想與該地區的所有葡萄酒1區。 – kroz

2

你描述聽起來更像是一個查找:

query.ToLookup(item => item.Name, s=> s.BeveragesList); 
// or if you're confident there are no duplicates 
query.ToDictionary(item => item.Name, s=> s.BeveragesList); 
// to flatten the list project your results using: 
query.ToLookup(item => item.Name, s=> s.BeveragesList) 
    .Select(s=> new { 
         Name = s.Key, 
         BeveragesList = s.SelectMany(t => t).ToArray() 
        }) 
    .ToArray() 
// instead of 
query.ToList(...); 
+1

我正在使用ToLookUp,但如此,我不發送該地區,只有葡萄酒。 – kroz

+0

我編輯過,以顯示如何投影您的最終結果 – reckface

+0

謝謝,但如果我在BeverageList中有一個更多列表,我有一個建議是ListDishes。任何建議怎麼辦? – kroz