调用的方法的LINQ查询的选择部分内 [英] Call a method inside the select part of a LINQ query
问题描述
我有以下的LINQ查询:
I have the following linq query:
var file = (from p in database.tblFile
join o in database.tblFileVersion on p.fldFileID equals o.fldFileID
join t in database.tblFileAttachments on p.fldFileID equals t.fldFileID
where p.fldFileID == team.Key
where o.fldVersionNo == highestVersion
select new UserDashboardFile
{
Filename = p.fldFilename,
VersionNumber = o.fldVersionNo,
FileID = team.Key,
Type = GetFileType(t.fldTableName),
}).Single();
GetFileType是返回枚举类型的方法。有没有语法错误,但是当我运行该项目(这是一个MVC 4 web项目),我收到以下错误:
GetFileType is a method that returns an enumeration type. There is no syntax error but when I run the project (it is an mvc 4 web project) I receive the following error:
LINQ到实体无法识别方法
位DCIS.Code.UserDashboardFileType GetFileType(System.String)'方法,
和这种方法不能被翻译成商店表达
LINQ to Entities does not recognize the method 'DCIS.Code.UserDashboardFileType GetFileType(System.String)' method, and this method cannot be translated into a store expression.
我想,这个查询不能被翻译成T-SQL查询,但我不知道如何改变我的查询,以避免上述错误。在此先感谢...
I imagine that this query cannot be translated into a t-sql query but I do not know how to change my query in order to avoid the above error. Thanks in advance...
推荐答案
您可以先选择匿名对象,然后构建 UserDashboardFile
。
You can select anonymous object first and then construct UserDashboardFile
.
var file = (from p in database.tblFile
join o in database.tblFileVersion on p.fldFileID equals o.fldFileID
join t in database.tblFileAttachments on p.fldFileID equals t.fldFileID
where p.fldFileID == team.Key
where o.fldVersionNo == highestVersion
select new
{
Filename = p.fldFilename,
VersionNumber = o.fldVersionNo,
FileID = team.Key,
FldTableName = t.fldTableName
}).Single();
var udFile = new UserDashboardFile { ..., Type = GetFileType(file.FldTableName) };
您也可以拨打 .AsEnumerable()
之前选择以防止 GetFileType
在SQL进行翻译。
Also you can call .AsEnumerable()
before select to prevent GetFileType
to be translated in sql.
这篇关于调用的方法的LINQ查询的选择部分内的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!