为什么ToList()在linq中不起作用?

Ash*_*med 3 c# linq

我在使用多个字段对数据进行排序时遇到问题

这是我用过的示例代码:

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

上面的代码没有显示任何错误,但也没有与expirydate字段排序:(

如果我这样使用

return Item.OrderBy(e => e.ExpiryDate).ToList();
Run Code Online (Sandbox Code Playgroud)

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

任何帮助

提前致谢

Cᴏʀ*_*ᴏʀʏ 6

我想这里有几件事情要发生.首先,您已将结果变量命名为与您在其中创建的类相同select.可能没有多大区别,但令人困惑.让我们改变它:

var items = from itm in DB.Items
            select new Item
            {
            };
Run Code Online (Sandbox Code Playgroud)

接下来,您的DB.Items上下文已经构建了Item对象.您不需要创建新的.在上面的代码中,Item无论如何,您的新对象都是空的.

var items = from itm in DB.Items
            select itm;
Run Code Online (Sandbox Code Playgroud)

如果您想立即订购它们,您也可以这样做:

var items = from itm in DB.Items
            orderby itm.ExpiryDate
            select itm;
Run Code Online (Sandbox Code Playgroud)

如果您需要它List,您可以在同一行中执行此操作:

var items = (from itm in DB.Items
             orderby itm.ExpiryDate
             select itm).ToList();
Run Code Online (Sandbox Code Playgroud)

现在items将是一个具体ListItem对象(List<Item>).


das*_*ght 5

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

删除第一个Select以使其工作:

var Item = DB.Items; // No "Select ..."
return Item.ToList().OrderBy(e => e.ExpiryDate).ToList();
Run Code Online (Sandbox Code Playgroud)

您的第一个ToList强制数据进入内存,OrderBy可以应用于何处.您也可以将其替换为AsEnumerable()呼叫,以避免第二次在内存中创建列表:

return Item.AsEnumerable().OrderBy(e => e.ExpiryDate).ToList();
Run Code Online (Sandbox Code Playgroud)