不知道这里有什么问题,当我运行应用程序时,在foreach循环中指向"查询中的var结果"时说"指定的方法不受支持".请帮忙...
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());
}
Run Code Online (Sandbox Code Playgroud)
编辑:使用ToList()也会给出相同的错误.
您的错误的原因是范围,这是"不支持的方法"错误告诉您的.
当使用Linq [填空] ORM时,通常会发生这种情况.所以,我猜你的实体必须来自ORM工具,比如Entity Framework,你正在使用像Linq to Entities这样的东西.
使用linq时,在访问它之前不会枚举您的查询,对于ORM来说,这意味着命中数据库或其他数据存储库.如果您不知道它存在,这种延迟动作可能会导致一些奇怪的行为,例如此错误.
但是,您有本地(非linq)代码并且您的查询交织在一起,因此linq to []编译器在编译linq代码时不知道如何处理本地代码.因此,"不支持的方法"错误 - 它基本上与从类外部引用私有方法相同,您调用的方法在当前范围内是未知的.
换句话说,编译器在尝试编译查询并在执行result.ToString()时命中数据库,但对CustomerNames的私有变量或foreach方法一无所知.数据库逻辑和本地对象逻辑必须保持独立 - 在本地使用之前完全解析数据库查询结果.
你应该能够像这样写:
var customerNames = entities.Customer.Select(c => c.CustomerName).ToList();
Run Code Online (Sandbox Code Playgroud)
如果你必须保持在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());
}
Run Code Online (Sandbox Code Playgroud)