3

我在对包含多个字段的数据进行排序时遇到问题

这是我使用过的示例代码:

 var Item = from itm in DB.Items
select new Item
{
};
return Item.ToList().OrderBy(e => e.ExpiryDate).ToList();

上面的代码没有显示任何错误,但也没有使用到期日期字段排序:(

如果我这样使用

return Item.OrderBy(e => e.ExpiryDate).ToList();

这给出了一个错误,即 sql 不包含 orderby 的翻译

任何帮助

提前致谢

4

2 回答 2

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将是一个具体ListItem对象 ( List<Item>)。

于 2012-10-23T13:35:01.917 回答
5

您的代码创建Item使用默认构造函数的实例,而不会将您从数据库中获得的任何内容传递给它。这就是为什么你会得到一个相同的空项目列表;对它们进行排序没有效果。

删除第一个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();
于 2012-10-23T13:32:55.783 回答