我有两个列表,一个是所有语言,另一个是该网站的语言子集,其目的是返回所有语言,但如果子集的元素对应于所有语言的列表,则更改布尔值的属性
语言的DTO:
public class DTOLanguage
{
public bool HaveLanguage { get; set; }
public int IdLanguage { get; set; }
//Other properties...
}
返回所有语言的方法:
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;
}
返回语言子集的方法:
public List<DTOLanguage> GetLanguagesById(int idSite)
{
var result = repository.RepSite.GetLanguagesById(idSite).Select(x => new DTOLanguage
{
IdLanguage = x.IdLanguage
}).ToList();
return result;
}
在DataAccess层中调用GetLanguagesById
,所以我认为这个方法应该接收另一个参数(GetLanguages
返回什么)并在那里做一些花哨的LINQ。
我知道我可以过滤(例子):
SubsetOfLanguages.Where(lg => lg.IdLanguage == AllLanguagesItem.IdLanguage)
{
AllLanguagesItem.HaveLanguage = True;
}
但我不确定它应该如何。
提前致谢。
答案 0 :(得分: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;
}
答案 1 :(得分: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;
}