这是查询工作正常,不会导致问题的工作示例。为了简单起见,我跳过了数据库,直接进入内存中的对象,这可能是为什么它对我有用。我认为Honza是对的,这是一个与ORM层相关的问题。您可以运行下面的例子
下面是linqpad一个例子:
void Main()
{
var Categories = new List<Category>() { new Category { CategoryName = "CatName", Products = new List<Product>() { new Product { Name = "ProductName1" } } } };
Func<Product, string> selector = p => p.Name;
var sb = new StringBuilder();
var query = Categories.Select(c => new
{
Products = c.Products.OrderBy(selector)
});
foreach (var x in query)
{
sb.AppendLine(x.Products.First().Name);
}
Console.WriteLine(sb.ToString());
Console.Read();
}
public class Product
{
public string Name { get; set; }
}
public class Category
{
public string CategoryName { get; set; }
public List<Product> Products { get; set; }
}
//定义其它的方法,在这里班
这里是Visual Studio的控制台应用程序版本:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
var Categories = new List<Category>() { new Category { CategoryName = "CatName", Products = new List<Product>() { new Product { Name = "ProductName1" } } } };
Func<Product, string> selector = p => p.Name;
var sb = new StringBuilder();
var query = Categories.Select(c => new
{
Products = c.Products.OrderBy(selector)
});
foreach (var x in query)
{
sb.AppendLine(x.Products.First().Name);
}
Console.WriteLine(sb.ToString());
Console.Read();
}
public class Product
{
public string Name { get; set; }
}
public class Category
{
public string CategoryName { get; set; }
public List<Product> Products { get; set; }
}
}
}
告诉我..没有'产品= c.Products.ToList()排序依据(选择)'的作品吗? –
@SimonWhitehead:不,它不起作用,同样的例外。无论如何,即使调用ToList()工作,当产品在订购之前被过滤时,这也不是一个好的解决方案,因为订购将发生在内存中。 – user2604373
这对我来说很好。你能提供一个可以抛出这个异常的工作示例吗? –