Lý do lỗi của bạn là phạm vi, đó là lỗi "phương pháp không được hỗ trợ" cho bạn biết.
Điều này thường xảy ra khi sử dụng LINQ để [điền vào chỗ trống] ORM. Vì vậy, tôi đoán các thực thể của bạn phải từ một công cụ ORM, giống như Entity Framework, và bạn đang sử dụng một cái gì đó giống như LINQ to Entities.
Khi sử dụng LINQ truy vấn của bạn không được liệt kê cho đến khi bạn truy cập nó, cho ORM nghĩa là nhấn cơ sở dữ liệu hoặc kho dữ liệu khác. Hành động bị trì hoãn này có thể gây ra một số hành vi lạ nếu bạn không biết nó có đó, chẳng hạn như lỗi này.
Nhưng, bạn có mã cục bộ (không phải LINQ) và truy vấn của bạn đan xen, do đó trình biên dịch LINQ to [] không biết cách xử lý mã cục bộ của bạn khi biên dịch mã LINQ. Do đó, lỗi "phương thức không được hỗ trợ" - về cơ bản giống như tham chiếu một phương thức riêng từ bên ngoài lớp, phương thức bạn gọi là không rõ trong phạm vi hiện tại.
Nói cách khác, trình biên dịch đang cố gắng biên dịch truy vấn của bạn và nhấn cơ sở dữ liệu khi bạn thực hiện kết quả.ToString(), nhưng không biết gì về biến riêng tư của CustomerNames hoặc phương thức foreach. Logic cơ sở dữ liệu và logic đối tượng cục bộ phải được giữ riêng biệt - hoàn toàn giải quyết các kết quả truy vấn cơ sở dữ liệu trước khi sử dụng cục bộ.
Bạn sẽ có thể viết nó như thế này:
var customerNames = entities.Customer.Select(c => c.CustomerName).ToList();
Nếu bạn có để giữ cho foreach (cho logic phức tạp hơn, không cho đơn giản này của một ví dụ), bạn vẫn cần phải giải quyết LINQ to [] phần (bằng cách buộc nó liệt kê các kết quả truy vấn) trước khi liên quan đến bất kỳ mã không phải là mã 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());
}
Nguồn
2009-10-12 18:32:30
ở dòng nào? Nơi duy nhất cho lỗi là kết quả. –
"Thực thể" là gì? –
thực hiện một Console.WriteLine (result.ToString()); công việc? –