【发布时间】:2009-07-13 14:12:19
【问题描述】:
//A query to a local object
var deletionCommands = commands
.Where(a => a.Operation != Operation.Addition)
.Select(a => new { a.Prestador.cod_prestador, a.Prestador.cod_desdobramento })
;
//A Linq-To-SQL query
var toDelete = db.Prestadors
.Where(a => deletionCommands.Contains(new { a.cod_prestador, a.cod_desdobramento }))
;
db.Prestadors.DeleteAllOnSubmit(toDelete);
db.SubmitChanges();
唯一解决问题的是显式循环:
foreach (var command in commands)
{
if(command.Operation != Operation.Addition)
{
var toDelete = db.Prestadors
.Where(a =>
a.cod_prestador == command.Prestador.cod_prestador &&
a.cod_desdobramento == command.Prestador.cod_desdobramento
);
db.Prestadors.DeleteAllOnSubmit(toDelete);
}
}
db.SubmitChanges();
【问题讨论】:
-
真的是调用 AsEnumerable 引发了异常吗?哎呀-通常这不会做任何重要的事情。那是没有实际迭代它?
-
@Jon,这是一种简化。替换为实际代码。
-
@Jeff 现在我通过显式循环解决了问题,我认为它消除了命令对象的责任
-
@Jader,既然你已经解决了它,你可能不再关心了,但我很好奇:你是否使用相等测试而不是 Contains 方法尝试了你的原始语法?也就是说,您是否尝试过
.Where(a => a.cod_prestador == deletionCommands.Prestador.cod_prestador && ...而不是.Where(a => deletionCommands.Contains(new { a.cod_prestador, a.cod_desdobramento })) -
@Jeff 不,我没有尝试过,因为我看到“包含”方法等同于“显式循环内的直接比较”。
标签: c# .net linq linq-to-sql stack-overflow