LINQ 查询以遍历列表的列表,但 select 上层的项目匹配给定的过滤条件
LINQ query to to iterate through list of lists but select an item at the upper level matching given filter conditions
我有以下 类:
Public Class User
{
public List<SpecificUser> SpecificUsers{get;set;}
}
Public Class SpecificUser
{
public bool IsDefault{get;set;}
public List<SpecificUserRole> SpecificUserRoles{get;set;}
}
Public Class SpecificUserRoles
{
public bool IsPrimary{get;set;}
}
要求:给定一个用户对象,我只想获取 IsDefault=true 且(该特定用户)具有 'a' SpecificUserRole 的 SpecificUser 对象
与 IsPrimary=true。
这是我尝试过的,但它返回的是 bool 而不是 SpecificUser 的实例。
var defaultSpecificUser = user.SpecificUsers.Select(au => au.IsDefault && au.SpecificUserRoles.Select(aur => aur.IsPrimary).FirstOrDefault()).FirstOrDefault();
我可以通过两个查询来实现;但是想一次性完成:
var defaultSpecificUsers = user.SpecificUsers.Where(au => au.IsDefault).ToList();
var primarySpecificUser = defaultSpecificUsers .FirstOrDefault(ddau => ddau.SpecificUserRoles.Select(aur => aur.IsPrimary).FirstOrDefault());
我们将不胜感激任何帮助。
提前致谢。
这看起来很简单:
user.SpecificUsers.Where(su => su.IsDefault == true && su.SpecificUserRoles.Any(sr => sr.IsPrimary == true));
或简化:
user.SpecificUsers.Where(su => su.IsDefault && su.SpecificUserRoles.Any(sr => sr.IsPrimary);
当然,这假设不止一个特定用户符合条件。如果您只想要一个,请将 Where
替换为 First
或 FirstOrDefault
(如果您不确定是否存在)。
我有以下 类:
Public Class User
{
public List<SpecificUser> SpecificUsers{get;set;}
}
Public Class SpecificUser
{
public bool IsDefault{get;set;}
public List<SpecificUserRole> SpecificUserRoles{get;set;}
}
Public Class SpecificUserRoles
{
public bool IsPrimary{get;set;}
}
要求:给定一个用户对象,我只想获取 IsDefault=true 且(该特定用户)具有 'a' SpecificUserRole 的 SpecificUser 对象 与 IsPrimary=true。 这是我尝试过的,但它返回的是 bool 而不是 SpecificUser 的实例。
var defaultSpecificUser = user.SpecificUsers.Select(au => au.IsDefault && au.SpecificUserRoles.Select(aur => aur.IsPrimary).FirstOrDefault()).FirstOrDefault();
我可以通过两个查询来实现;但是想一次性完成:
var defaultSpecificUsers = user.SpecificUsers.Where(au => au.IsDefault).ToList();
var primarySpecificUser = defaultSpecificUsers .FirstOrDefault(ddau => ddau.SpecificUserRoles.Select(aur => aur.IsPrimary).FirstOrDefault());
我们将不胜感激任何帮助。 提前致谢。
这看起来很简单:
user.SpecificUsers.Where(su => su.IsDefault == true && su.SpecificUserRoles.Any(sr => sr.IsPrimary == true));
或简化:
user.SpecificUsers.Where(su => su.IsDefault && su.SpecificUserRoles.Any(sr => sr.IsPrimary);
当然,这假设不止一个特定用户符合条件。如果您只想要一个,请将 Where
替换为 First
或 FirstOrDefault
(如果您不确定是否存在)。