编程语言
首页 > 编程语言> > c#-在Linq中获取字符值到实体

c#-在Linq中获取字符值到实体

作者:互联网

我有一个表Assessment,其中(其中包括)两列CurrentGrade和PreviousGrade,它们都定义为char(1).等级是从A到Z的符号.

现在,我想编写一个查询来获取评估中所有记录的当前成绩和上一个成绩之间的差异,以数字表示,例如如果previous是A,current是D,则差为3.

我会做这样的事情:

var q = db.Assessments.Select(a => new { a.ID, Diff = a.CurrentGrade[0] - a.PreviousGrade[0] });

…但这不起作用,因为String.getChars没有SQL转换.

而且我不想在本地内存中执行此操作,因为在我的实际代码中,这只是一个大的“ where”子句的一部分,该子句涉及必须在Linq to Entities中完成的其他表达式.

有什么建议该怎么做?

解决方法:

在Linq-To-Entities中,可以使用SqlFunctions.Ascii:

using System.Data.Objects.SqlClient;

var result = db.Assessments.Select(a => new { a.id, 
    Diff = SqlFunctions.Ascii(a.CurrentGrade).Value - SqlFunctions.Ascii(a.PreviousGrade).Value });

请注意,如果CurrentGrade(A)高于PreviousGrade(D),您将得到-3的答案,这与您想要的答案相反…因此,您可能需要乘以-1以获得的真实方向.等级差异.

var result = db.Assessments.Select(a => new { a.id, 
    Diff = (SqlFunctions.Ascii(a.CurrentGrade).Value - SqlFunctions.Ascii(a.PreviousGrade).Value) * -1 });

标签:entity-framework-5,linq,sql,c,entity-framework
来源: https://codeday.me/bug/20191122/2057106.html