2016-12-14 71 views
3

我有兩個列表,其中一個是所有語言,另一個是該站點的語言子集,它的想法是返回所有語言,但改變布爾值的屬性if子集的元素對應於所有語言的列表。檢查哪些元素在一個列表中與另一個列表比較LINQ

DTO語言:

public class DTOLanguage 
{ 

    public bool HaveLanguage { get; set; } 
    public int IdLanguage { get; set; } 
    //Other properties... 
} 

方法返回所有語言:

public List<DTOLanguage> GetLanguagesById(int idSite) 
{ 
    var result = repository.RepSite.GetLanguagesById(idSite).Select(x => new DTOLanguage 
    { 
     IdLanguage = x.IdLanguage 
    }).ToList(); 

    return result; 
} 
:返回語言的子集

public List<DTOLanguage> GetLanguages() 
{ 
    var result = repository.RepSite.GetLanguages().Select(x => new DTOLanguage 
    { 
     IdLanguage = x.IdLanguage, 
     CodName = x.CodName, 
     Name = x.Name 
    }).ToList(); 

    return result; 
} 

方法

在DataAccess層中調用了GetLanguagesById,所以我認爲這種方法應該接收另一個參數(GetLanguages返回)並在那裏創建一些奇特的LINQ。

我知道我可以過濾(例如):

SubsetOfLanguages.Where(lg => lg.IdLanguage == AllLanguagesItem.IdLanguage) 
    { 
     AllLanguagesItem.HaveLanguage = True; 
    } 

但是我真的不知道,因爲它應該如何。

在此先感謝。

回答

1

你可以使用Contains擴展方法是這樣的:

var languages=GetLanguages(); 
var subsetids=repository.RepSite.GetLanguagesById(idSite).Select(x =>x.IdLanguage);//Select just the id value 
foreach(var l in languages.Where(l=>subsetids.Contains(l.IdLanguage))) 
{ 
    l.HaveLanguage = true; 
} 
+0

這真的做到了,upvoted並標記爲答案。 作爲一個方面說明,我用另一種方法包裝它,謝謝! – user3442470

0

你可以這樣做:

var allLanguages = GetLanguages(); 

var subset = SubsetOfLanguages 
    .Where(lg => allLanguages.Any(a => lg.IdLanguage == a.IdLanguage)) 
    .ToArray(); 

foreach(var item in subset) 
{ 
    item.HaveLanguage = True; 
} 
相關問題