EF 5.0简单删除声明

时间:2013-09-18 17:39:25

标签: c# linq entity-framework

我正在尝试在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'

任何想法?

2 个答案:

答案 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并执行它。