0

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

任何的想法?

4

2 回答 2

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();
}
于 2013-09-18T18:17:15.440 回答
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);     
    }
}

或者编写一个存储过程,将其导入实体框架并执行。

于 2013-09-18T17:49:26.723 回答