//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 to Entities无法识别方法' EF_Examples_02.Person LastOrDefault [Person]
我有两个表(人,收入),每个人可以有n个收入。 两个表有关系。
答案 0 :(得分:1)
此处的问题是LastOrDefault
未转换为SQL语句。
基本上你有两个选择:
首先获取所有数据:
//the tolist will fetch the data from the database
db.People.ToList().LastOrDefault(p => p.Incomes.Any());
或者按降序排序,也许按id:
db.People.Where(p => p.Incomes.Any()).OrderByDescending(c => c.Id).FirstOrDefault();
至于混合选项:
db.People.Where(p => p.Incomes.Any()).ToList().LastOrDefault();
答案 1 :(得分:1)
问题出在LastOrDefault中。 Ling-to-Entities不支持它。
您必须知道几个Enumerable函数不能作为Queryable执行。
MSDN Supported and Unsupported LINQ Methods (LINQ to Entities)
LastOrDefault:不支持
幸运的是,支持FirstOrDefault。
如果您在没有任何排序的情况下搜索First / Last,通常结果是相当不可预测的。
考虑为自己指定什么叫做Last元素,之后很容易按降序排序,所以它将是你的第一个元素,可以查询。