Filter list <object> by another list <object2> C # LINQ

Consider the following lists:

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>();

      

How is it possible (with LINQ

) to filter lCoupon

using lUser

so that only those remain that have a field lCoupon.username

present in lUser.name

, and lUser.selected

istrue

Pseudocode:

lCoupon = lCoupon.Where (w => lUser.name == w.name AND lUser.selected == true).ToList();

      

+3


source share


2 answers


You can use LINQ method Any

on a list lUser

like:



var coupons = lCoupon
    .Where(c => lUser.Any(u => u.selected && u.name == c.username))
    .ToList();

      

+5


source


You can also do this with a connection:

var coupons = from coupon in lCoupons
          join user in lUser on coupon.username equals user.name
          where user.selected
          select coupon; 

      

This way you can easily select values ​​from both types of objects, for example:



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} ; 

      

You can ToList()

if you want.

+4


source







All Articles