Linq 不包含';如果没有值,则不创建键
我有两种类型Linq 不包含';如果没有值,则不创建键,linq,linq-to-entities,Linq,Linq To Entities,我有两种类型User和Area public class User : IEntity { public int UserId { get; set; } public string Username { get; set; } public int AreaId { get; set; } public string CreatedByUserName { get; set;
User
和Area
public class User : IEntity
{
public int UserId { get; set; }
public string Username { get; set; }
public int AreaId { get; set; }
public string CreatedByUserName { get; set; }
public DateTime CreatedDateTime { get; set; }
public string LastModifiedByUserName { get; set; }
public DateTime? LastModifiedDateTime { get; set; }
}
public class Area : IEntity
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual int DefaultAdminId { get; set; }
public string CreatedByUserName { get; set; }
public DateTime CreatedDateTime { get; set; }
public string LastModifiedByUserName { get; set; }
public DateTime? LastModifiedDateTime { get; set; }
//Navigation properties
public virtual ICollection<User> Users { get; set; }
}
这很好,但是如果区域
不包含任何用户
它仍然被放入字典中,这不是我想要的
有没有人能告诉我如何省去不包含任何
用户的区域
?在发送到字典之前,您可以过滤区域
var dictionary = Areas.Where(s => s.Users.Any()).ToDictionary...
区域中的用户与包含这些用户的AreaId不匹配,这是非常奇怪的,但是:
var usersByArea = (from area in areas
let areaUsers = area.Users.Where(u => u.AreaId == area.Id).ToList()
where areaUsers.Count > 0
select new
{
Name = area.Name,
Users = areaUsers
}).ToDictionary(a => a.Name, a => a.Users);
很好很干净的解决方案,谢谢!
var usersByArea = (from area in areas
let areaUsers = area.Users.Where(u => u.AreaId == area.Id).ToList()
where areaUsers.Count > 0
select new
{
Name = area.Name,
Users = areaUsers
}).ToDictionary(a => a.Name, a => a.Users);