Shorter delete query in LINQ

时间:2017-04-10 02:55:50

标签: c# linq

I have this code below a delete query using linq. But it feels like a long method?. Is there any alternative way to do this?.

var ListOfData = (from a in db.Table1 
                  join b in db.Table2 on a.Table1Id equals b.Table2Id  
                  where a.Table1Id == (param) select a)
                  .ToList();

foreach(var item in ListOfData )
{
    var DelRecord = (from a in db.Table1 
                     join b in db.Table2 on a.Table1Id equals b.Table2Id 
                     where a.Table1Id == item.TableId select a)
                    .FirstOrDefault();

    db.Table1.DeleteObject(DelRecord);
    db.SaveChanges();
  }

1 个答案:

答案 0 :(得分:3)

You can remove the second query, you already have the data you need.

var ListOfData = (from a in db.Table1 
                  join b in db.Table2 on a.Table1Id equals b.Table2Id 
                  where a.Table1Id == (param) select a)
                  .ToList();

foreach(var item in ListOfData )
{
    db.Table1.DeleteObject(item);
}
db.SaveChanges();

If you're using Entity Framework 6, they have introduced RemoveRange() method.

var ListOfData = (from a in db.Table1 
                  join b in db.Table2 on a.Table1Id equals b.Table2Id 
                  where a.Table1Id == (param) select a)
                  .ToList();

db.Table1.RemoveRange(ListOfData);
db.SaveChanges();