gpt4 book ai didi

linq - linq 结果中的 foreach 不起作用

转载 作者:行者123 更新时间:2023-12-04 17:42:05 26 4
gpt4 key购买 nike

不知道这里出了什么问题,当我运行应用程序时,它说“不支持指定的方法”,指向 foreach 循环中的“var result in query”。请帮忙...

var query = from c in entities.Customer
select c.CustomerName;

List<string> customerNames = new List<string>();

foreach (var result in query)
{
customerNames.Add(result.ToString());
}

编辑:使用 ToList() 也会给出同样的错误。

最佳答案

您的错误的原因是范围,这就是“方法不支持”错误告诉您的内容。

这通常发生在使用 Linq [填空] ORM 时。因此,我猜您的实体必须来自 ORM 工具,例如 Entity Framework,而您使用的是 Linq to Entities 之类的工具。

使用 linq 时,您的查询在您访问它之前不会被枚举出来,这对于 ORM 意味着访问数据库或其他数据存储库。如果您不知道它的存在,这种延迟操作可能会导致一些奇怪的行为,例如此错误。

但是,您有本地(非 linq)代码和查询交织在一起,因此 linq to [] 编译器在编译 linq 代码时不知道如何处理您的本地代码。因此“方法不支持”错误 - 它与从类外部引用私有(private)方法基本相同,您调用的方法在当前范围内是未知的。

换句话说,编译器试图编译您的查询并在您执行 result.ToString() 时访问数据库,但对 CustomerNames 的私有(private)变量或 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());
}

关于linq - linq 结果中的 foreach 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1555914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com