2017-06-20 111 views
0
 //Delete Last Record which has income 
     var itemToRemove = db.People.LastOrDefault(p => p.Incomes.Any()); 
     db.Incomes.RemoveRange(itemToRemove.Incomes); 
     db.People.Remove(itemToRemove); 

记录它给了我这个错误删除与孩子

“System.NotSupportedException”类型的未处理的异常出现在EntityFramework.SqlServer.dll

其他信息:LINQ到实体呢不认识的方法'EF_Examples_02.Person LastOrDefault [Person]

我有两个表(人,收入)每个人可以有n来。 两个表有关系。

+4

它无法将'LastOrDefault'转换为SQL语句。没有相同的东西! [这个答案](https://stackoverflow.com/a/7259649/5174469)更多地了解它 –

回答

1

这里的问题是LastOrDefault没有被转换为SQL语句。

基本上,你有2种选择:

首先获取的所有数据:

//the tolist will fetch the data from the database 
db.People.ToList().LastOrDefault(p => p.Incomes.Any()); 

或ORDER BY下降,也许是ID:

db.People.Where(p => p.Incomes.Any()).OrderByDescending(c => c.Id).FirstOrDefault(); 

至于混合选项:

db.People.Where(p => p.Incomes.Any()).ToList().LastOrDefault(); 
+0

非常感谢。这些代码删除了最后一个有收入的人。但不要从收入表中删除他们的收入。 db.Incomes.RemoveRange(itemToRemove.Incomes);剂量工作 – Mansoure

+0

你有错误吗? – Stefan

+0

当我关闭视觉工作室,并再次打开它,它工作正常,非常感谢我的朋友。 – Mansoure

1

T他的问题在LastOrDefault中。 Ling-to-Entities不支持它。

您必须知道,几个Enumerable函数不能执行为Queryable。

MSDN Supported and Unsupported LINQ Methods (LINQ to Entities)

LastOrDefault:不支持

幸运的是,FirstOrDefault支持。

如果您搜索First/Last而没有任何排序,通常结果是相当不可预测的。

考虑为自己指定一下你会称之为最后一个元素,之后很容易按降序排列,所以它将成为你的第一个元素,可以被查询。