C# 通过另一个列表C LINQ筛选列表
考虑以下列表:C# 通过另一个列表C LINQ筛选列表,c#,linq,C#,Linq,考虑以下列表: class user { public int id {get; set;} public string name {get; set;} public bool selected {get; set;} } class coupon { public string username {get; set;} public string coupontype {get; set;} public string code {get; set;}
class user {
public int id {get; set;}
public string name {get; set;}
public bool selected {get; set;}
}
class coupon {
public string username {get; set;}
public string coupontype {get; set;}
public string code {get; set;}
}
List<user> lUser = new List<user>();
List<coupon> lCoupon = new List<coupon>();
您可以在lUser列表上使用LINQ Any方法,如下所示:
var coupons = lCoupon
.Where(c => lUser.Any(u => u.selected && u.name == c.username))
.ToList();
您也可以通过连接执行此操作:
var coupons = from coupon in lCoupons
join user in lUser on coupon.username equals user.name
where user.selected
select coupon;
通过这种方式,您可以轻松地从两种对象类型中选择值,例如:
var selectedObjects = from coupon in lCoupons
join user in lUser on coupon.username equals user.name
where user.selected
select new { CouponCode = coupon.code, UserId = user.Id} ;
如果你愿意,可以把这个列出来 您可以使用where user.selected,而无需将布尔值与True进行比较。请记住,whereny将遍历每个优惠券的用户列表,即,您将具有ONM的复杂性*联接操作对内部集合使用查找。这就给了你+Mcomplexity@SergeyBerezovskiy:糟糕的是,我不能+1那条评论。我确实想知道查找是如何创建的,毕竟,据我所知,它只是一个没有散列的列表。@Stefan你可以看一下。首次运行时,将创建内部集合的查找。然后在外部集合迭代期间使用它按键获取“连接”项
var selectedObjects = from coupon in lCoupons
join user in lUser on coupon.username equals user.name
where user.selected
select new { CouponCode = coupon.code, UserId = user.Id} ;