return JsonConvert.SerializeObject(new Entities()
.Student_Master
.Where(k => k.Student_Location == Location && k.Student_Course == Program)
.OrderBy(i => i.Student_Batch)
.Select(i => i.Student_Batch)
.Distinct()
.ToList());
输出:
[23,24,28,25,30,26,27,29]
需要输出
[23,24,25,26,27,28,29,30]
我尝试使用OrderBy(i => i.Student_Batch)
但数据库Student_Batch
数据类型为string
,因此无法正确排序
我试过跟随
var data=new Entities().Student_Master.Where(k => k.Student_Location == Location && k.Student_Course == Program).OrderBy(i => i.Student_Batch).Select(i => i.Student_Batch).Distinct().ToList();
foreach(var obj in data)
{
//converted string to int then store in array
}
有简单的方法吗?
答案 0 :(得分:1)
.Distinct()
删除任何.OrderBy()
子句,因为根据定义,Distinct()
(或SQL中的DISTINCT
)返回一组无序的不同值。您需要在.OrderBy()
电话后链接.Distinct()
来电。
当您想要按数值对它们进行排序时,将值作为字符串确实会产生问题。如果您无法更改数据库架构,则可以使用this method将值投影到整数,然后执行.Distinct()
和.OrderBy()
。
最后,您应该在使用Entities对象后正确处置它,以关闭数据库连接,最好将其封装在using
指令中。
答案 1 :(得分:1)
好的,因为问题在于排序。你有几个选择,我将展示其中2个。首先,您可以使用sudo ./certbot-auto certonly --standalone -d mydomain.com -d www.mydomain.com
,这很常见:
Array.Sort()
第二种常见方法是创建自定义比较器并在string[] values = new Entities()
.Student_Master
.Where(k => k.Student_Location == Location && k.Student_Course == Program).Select(i => i.Student_Batch)
.Distinct().ToArray();
Array.Sort(values); // all you need.
内使用它:
OrderBy
答案 2 :(得分:0)
由于Linq2Entities不支持从字符串转换为int(既不使用int.Parse
也不使用Convert.ToInt32
),您必须使用IQueryAble
将IEnumerable
转换为AsEnumerable
。当然这是性能方面的噩梦,但是由于SQL无法通过即时转换对字符串进行整数运算,这就是你所需要的。
顺便说一句:使用ToArray
或ToList
也会枚举该集合并将其放入内存中。