我正在尝试在EF 5.0上运行删除语句。删除让我们说5000~40000条记录 这是我的代码:
using(myEntity ctx = new myEntity) {
var q = from s in ctx.MyTable.where( x => x.accountID == 1234) select s;
ctx.myTable.Remove(q);
// because there is no ctx.DeleteObject(whatever)
// since this is not EF 4.0
}
这是错误: 无法从'System.Linq.IQueryable'转换为'namespace.myTable'
任何想法?
答案 0 :(得分:1)
在您的示例中,您获得了IQueryable< myTable>并尝试将其传递给具有以下签名的Remove方法:
public TEntity Remove(TEntity entity)
由于它只接受实体的实例,因此您必须将IQueryable实际转换为实体列表,然后迭代它们。我很可能会自己这样做:
using(var ctx = new myEntity())
{
ctx.myTable
.Where(x => x.accountId == 1234)
.ToList()
.ForEach(item => ctx.myTable.Remove(item));
ctx.SaveChanges();
}
答案 1 :(得分:0)
您正尝试从表中删除LINQ查询(这没有任何意义),而不是删除表条目。
您需要做的是:
using(myEntity ctx = new myEntity) {
var q = from s in ctx.MyTable.where( x => x.accountID == 1234) select s;
foreach(var entry in q)
{
ctx.myTable.Remove(entry);
}
}
或编写存储过程,将其导入Entity Framework并执行它。