问题 Linq按字母顺序排列


我有一个产品表,想要按字母顺序排序数据。但是,当我写这个查询时,他们仍然是id。我在谷歌检查了很多页面,但无法找到任何来源。

var product = Db.tablename
                .Where(s => s.colum == DropDownList2.SelectedValue)
                .OrderBy(s=> s.Name);

12711
2018-05-15 21:25


起源

你在哪里使用产品的结果?我的意思是你试图将你的数据绑定到gridview或另一个控件?你也可以发这个代码吗?谢谢 ! - Christos
是的我发送restul给datalist。 - Seration


答案:


这个查询

var product = Db.tablename
                .Where(s => s.colum == DropDownList2.SelectedValue)
                .OrderBy(s=> s.Name);

在被要求之前不会被执行。所以你必须把它改成以下一个:

var product = Db.tablename
                .Where(s => s.colum == DropDownList2.SelectedValue)
                .OrderBy(s=> s.Name).ToList();

发生这种情况的原因是,实际上您刚刚声明了一个查询。我的意思是你没有执行它。这就是LINQ查询的本质,在技术术语中称为自定义执行。另一方面,如果你打电话给 ToList() 在查询结束时,您将触发立即执行此查询,结果将是a List 与...相同的类型 s.Name


13
2018-05-15 21:32



我犯了这个错误System.Data.SqlClient.SqlException:无法比较或排序text,ntext和image数据类型,除非使用IS NULL或LIKE运算符 - Seration
在数据库中将类型更改为nvarchar。这不会影响您的数据,它将解决您的问题。我对这个错误一无所知,但是我做了一点谷歌搜索后发现了这个 forums.asp.net/t/1481629.aspx?Help+Again,其中陈述了上述建议。 - Christos
Colom类型是文本我改变了varchar max并添加了ToList()。这很棒:)非常感谢你 - Seration
我很高兴我可以帮忙!没关系 - Christos


您必须使用ToList来执行排序。

var product = Db.tablename
                .Where(s => s.colum == DropDownList2.SelectedValue)
                .OrderBy(s=> s.Name).ToList();

order by无效,只执行查询,ToList将对原始查询进行排序。


1
2018-05-15 21:30



我犯了这个错误System.Data.SqlClient.SqlException:无法比较或排序text,ntext和image数据类型,除非使用IS NULL或LIKE运算符。 - Seration
您使用的是哪个Sql版本?对于可能导致此错误的旧版SQL存在一些限制 - Fals
主机公司使用Mssql2012:/ - Seration