LINQ查询以遍历列表列表,但在与给定筛选条件匹配的上层选择一个项目



我有以下类:

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

最新更新