Home > database >  Use except() to exclude items from List
Use except() to exclude items from List

Time:01-06

Trying to use Except to exclude items from a list. However the following code is not working for me i.e. my list still includes the records that it should exclude. Is there anything obvious that I am doing wrong? Is there an issue with my loops? BTW the inverse of this code works i.e correct record is inserted when RunTime matches.

        [HttpPost]
        public JsonResult InsertActivities([FromBody] List<MemberData> customers)
        {
            var mData =_context.MemberData.Select(x => x.RunTime).ToList();
            foreach (var item in mData)
            {
                var exclude = customers.Where(x => x.RunTime == item).ToList();
                var list = customers.Except(exclude).ToList();

                foreach (var data in list)
                {
                    _context.MemberData.Add(data);
                }
            }
            int insertedRecords = _context.SaveChanges();
            return Json(insertedRecords);
        }

CodePudding user response:

Firstly be sure you have model design like below:

public class MemberData:IEquatable<MemberData>
{
    public int Id { get; set; }
    public string RunTime { get; set; }

    public bool Equals(MemberData other)
    {
        if (other is null)
            return false;

        return this.RunTime == other.RunTime;
    }
    public override bool Equals(object obj) => Equals(obj as MemberData);
    public override int GetHashCode() => (RunTime).GetHashCode();
}

Then change your code like below:

public JsonResult InsertActivities([FromBody] List<MemberData> customers)
{
    //hard-coded the value...
    //customers = new List<MemberData>()
    //{
    //    new MemberData(){RunTime="aa"},
    //    new MemberData(){RunTime="bb"},
    //    new MemberData(){RunTime="ee"},
    //};   //hard-coded the value...
    var mData = _context.MemberData.ToList();
    var list = customers.Except(mData);
    foreach (var item in list)
    {
        foreach (var data in list)
        {
            _context.MemberData.Add(data);
        }
    }
    int insertedRecords = _context.SaveChanges();
    return Json(insertedRecords);
}

Note:

For inserting data to database successfully, if your model contains primary key, be sure the data's(after did Except operation) keys are not duplicated with the existing database data. Or you can just do like what I did in above code that do not set value for primary key.

  •  Tags:  
  • Related