2017-06-20 112 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而沒有任何排序,通常結果是相當不可預測的。

考慮爲自己指定一下你會稱之爲最後一個元素,之後很容易按降序排列,所以它將成爲你的第一個元素,可以被查詢。