您的錯誤的原因是範圍,這是「方法不支持」錯誤告訴你。
這通常發生在使用Linq來填充空白時。所以,我猜你的實體必須來自一個ORM工具,比如Entity Framework,而你正在使用像Linq這樣的實體。
使用linq時,您的查詢不會枚舉出來,直到您訪問它,ORM的意思是擊中數據庫或其他數據存儲庫。如果你不知道它是否存在,比如這個錯誤,這個延遲的行爲會導致一些奇怪的行爲。
但是,你有本地(非linq)代碼和你的查詢交織在一起,所以當編譯linq代碼時,linq to []編譯器不知道如何處理你的本地代碼。因此,「方法不支持」錯誤 - 它與從類外部引用私有方法基本相同,您調用的方法在當前範圍內是未知的。
換句話說,編譯器試圖編譯您的查詢並在您執行result.ToString()時命中數據庫,但不知道CustomerNames的私有變量或foreach方法的任何內容。數據庫邏輯和本地對象邏輯必須保持分離 - 在本地使用之前完全解決數據庫查詢結果。
你應該能夠把它寫這樣的:
var customerNames = entities.Customer.Select(c => c.CustomerName).ToList();
如果你必須保持在foreach(用於更復雜的邏輯,而不是爲這個簡單的例子),你仍然需要解決的LINQ到[]部分(通過強制它枚舉查詢結果)在涉及任何非linq代碼之前:
var query = from c in entities.Customer
select c.CustomerName;
var qryList = query.ToList();
List<string> customerNames = new List<string>();
foreach (var result in qryList)
{
customerNames.Add(result.ToString());
}
在哪一行?唯一明顯的地方是錯誤是結果。 – 2009-10-12 17:41:17
什麼是「實體」? – 2009-10-12 17:41:39
做了一個Console.WriteLine(result.ToString());工作? – 2009-10-12 18:18:40