我在使用多个字段排序数据时遇到问题
这是我使用的示例代码:
var Item = from itm in DB.Items
select new Item
{
};
return Item.ToList().OrderBy(e => e.ExpiryDate).ToList();
上面的代码没有显示任何错误,但也没有使用expirydate字段排序:(
如果我这样使用
return Item.OrderBy(e => e.ExpiryDate).ToList();
这给出了一个错误,即sql不包含orderby的翻译
任何帮助
提前致谢
答案 0 :(得分:6)
我认为这里有一些事情发生。首先,您已将结果变量命名为与select
中创建的类相同。可能没有多大区别,但令人困惑。让我们改变它:
var items = from itm in DB.Items
select new Item
{
};
接下来,您的DB.Items
上下文已由Item
个对象构建。您不需要创建新的。在上面的代码中,您的新Item
对象无论如何都是空的。
var items = from itm in DB.Items
select itm;
如果您想立即订购,也可以这样做:
var items = from itm in DB.Items
orderby itm.ExpiryDate
select itm;
如果您需要List
,则可以在同一行中执行此操作:
var items = (from itm in DB.Items
orderby itm.ExpiryDate
select itm).ToList();
现在items
将成为List
Item
个List<Item>
个对象的具体{{1}}。
答案 1 :(得分:5)
您的代码使用默认构造函数创建Item
的实例,而不将从DB获得的任何内容传递给它。这就是为什么你得到一个相同的空项目列表;对它们进行排序没有任何效果。
删除第一个Select
以使其正常工作:
var Item = DB.Items; // No "Select ..."
return Item.ToList().OrderBy(e => e.ExpiryDate).ToList();
您的第一个ToList
强制数据进入内存,可以应用OrderBy
。您也可以使用AsEnumerable()
调用替换它,以避免第二次在内存中创建列表:
return Item.AsEnumerable().OrderBy(e => e.ExpiryDate).ToList();