在Linq中获取实体中的字符值

时间:2014-02-16 15:19:17

标签: c# sql linq entity-framework entity-framework-5

我有一个表Assessment,其中包含两列CurrentGradePreviousGrade,其中两列都定义为char(1)。等级是从A到Z的符号。

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

我会做这样的事情:

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

...除了这不起作用,因为String.getChars没有SQL翻译。

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

有任何建议怎么做?

1 个答案:

答案 0 :(得分:3)

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高于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 });