我有一个返回所有用户的查询:
public class User
{
public int Id {get;set;}
public virtual List<Location> Locations {get;set;}
}
现在我有一个用户列表,但我只想为每个用户返回位置,我该怎么做?
var users = repository.FindAll();
因此,对于每个用户,我想返回Location集合。
答案 0 :(得分:3)
我不完全确定您的问题,但实体框架与您的存储库相结合应该返回您的对象的活动集合。如果语法确实生成了一个有效的对象,那么我假设你有以下数据。
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public List<Location> Locations { get; set; }
}
你可以这样做:
var locations = users.GetAllUsers()
.Select(user => user.Locations)
.SelectMany(location => location)
.Distinct();
因此,选择位置对象,然后将其展平以获得所需数据,然后选择不同以删除重复项。因此,您将收到与您的用户相关联的所有位置。你可以混合和匹配Linq来完成这一系列不同的方式。我可能有语法或反转Select
和SelectMany
,因为我一直被打断但这至少可以帮助你。
答案 1 :(得分:2)
首先,您应该提取所有位置,然后将它合并到单个列表中
var mergedList = MergeLists(users.Select(x => x.Locations).ToList());
MergeLists看起来像这样
List<Location> MergeLists(List<List<Location>> listsOfLists)
{
List<Location> mergedList = new List<Location>();
foreach (List<Location> listLocation in listsOfLists)
{
mergedList.AddRange(listLocation);
}
return mergedList;
}
EDIT。 更优雅的解决方案
users.Select(x => x.Locations).SelectMany(x => x).ToList();