【发布时间】:2019-10-31 00:08:29
【问题描述】:
我在MVC c#中有这段代码,它的概念是好的。 “x.Letter.Kind”是我想在创建列表时翻译成文本的数字。所以我写了一个函数(LetterType),它接受一个字节并返回其关联的文本。但是当程序运行时,它给了我一个错误,上面写着:
{"LINQ to Entities 无法识别方法 'System.String LetterType(Byte)' 方法,并且该方法无法转换为存储表达式。"}
我不明白这是什么意思。有人可以帮我解决这个问题吗? 谢谢
public JsonResult GetLetterList(DataTablesParam param)
{
int fld_id = 23571;
int userId = 1454;
int totalCount = 0;
List<ViewLetterInformation> list = new List<ViewLetterInformation>();
using (WebECartableEntities db = new WebECartableEntities())
{
int pageNo = 1;
if (param.iDisplayStart >= param.iDisplayLength)
{
pageNo = param.iDisplayStart / param.iDisplayLength + 1;
}
totalCount = db.Referrings.Where(x => x.usr_Receiver__Id == userId && x.fld_Id == fld_id).Count();
list = db.Referrings.Where(x => x.usr_Receiver__Id == userId && x.fld_Id == fld_id).OrderBy(x => x.Letter_Id).Skip((pageNo - 1) * param.iDisplayLength).Take(param.iDisplayLength).Select(x => new ViewLetterInformation
{
Letter_Id = x.Letter_Id,
ProjectCode = x.Letter.Project.Code,
LetterType = LetterType(x.Letter.Kind) //This line gives error
Ref_subject = x.Subject
}).ToList();
return Json(new
{
aaData = list,
sEcho = param.sEcho,
iTotalDisplayRecords = totalCount,
iTotalRecords = list.Count()
}, JsonRequestBehavior.AllowGet);
}
}
}
private string LetterType(byte LetterType)
{
string result = "";
switch (LetterType)
{
case 0:
case 4:
case 8:
result = "Import";
break;
case 1:
case 5:
case 9:
result = "Export";
break;
case 2:
case 6:
case 10:
result = "Internal";
break;
default:
result = "";
break;
}
return result;
}
如果我使用
LetterType = x.Letter.Kind.toString()
而不是
LetterType = LetterType(x.Letter.Kind)
它工作正常,但我需要它的等效文本数据。
谢谢
【问题讨论】:
-
如果您在
Select之前放置AsEnumerable,这将导致您的投影发生在内存中,您不必担心将代码转换为SQL。 -
您可以从中获取
list,然后应用LetterType过滤器。 Linq to entity 将无法将您的方法转换为 SQL 语句。 -
LetterType 是枚举吗?如果是这样,而不是使用种类。试试 LetterType = (这里放枚举类型,不是实际的枚举名称)LetterType
-
@jdweng:不是
-
问题是 EF 正在尝试将您的 C# 代码转换为 SQL。它知道如何对大多数 C# 运算符和通用库执行此操作,但不适用于您的自定义方法。因此,通过使用
AsEnumerable,您会告诉您此时停止转换为 SQL,并在获取数据后在内存中执行其余的 Linq 代码。
标签: c# entity-framework linq linq-to-entities