[英]How to write not in clause in lambda expression where not in contains value from another model list
我正在尝试编写 lambda 表达式来获取其他 model 列表中存在 Id 的数据。 下面的查询返回 UserId,它将在另一个表达式中进一步用作过滤数据的键。
var _result = authenticationStatus.accountDetails
.GroupBy(m => m.User_Id)
.Select(m =>new AccountDetails {
User_Id= m.Key,
IsReg = m.Sum(ta => Convert.ToInt32(ta.IsRegistered))
})
.Where(m => m.IsReg > 0)
.ToList();
现在 _result 将具有 userId 属性,该属性将进一步用作过滤以下查询的数据的键,但是每当我尝试使用 User_id 过滤结果时,我在编译时遇到错误-“无法从字符串转换为 AccountDetail "
var authenticated = authenticationStatus.accountDetails
.Where(x=>result.Contains(x.User_Id))
.ToList();
注意 -AccountDetail 是 model,下面是 model 表示
public class AccountDetails
{
public string UserId {get;set;}
public int IsReg {get;set;}
}
您需要将User_Id
与列表中对象的属性值进行比较,而不是与列表中的对象进行比较。
var authenticated = authenticationStatus.accountDetails
.Where(x => result.Any(y => y.UserId == x.User_Id))
.ToList();
如果结果包含 AccountDetails 列表,则 Contains 正在查找 AccountDetails object 而不是键。 您可以改用.Any linq 语句。 就像是
var authenticated = authenticationStatus.accountDetails
.Where(x=>result.Any(ad = > string.Equals(ad.UserId, x.User_id))
.ToList();
或者创建字典或哈希集,而不是初始查询中的列表
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.