KiRa
KiRa

Reputation: 924

Shorter delete query in 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();
  }

Upvotes: 0

Views: 2238

Answers (1)

Worthy7
Worthy7

Reputation: 1561

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

Upvotes: 2

Related Questions