在LINQ查询的select部分内调用一个方法

时间:2012-11-11 16:17:35

标签: c# entity-framework linq-to-entities

我有以下linq查询:

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项目)时,我收到以下错误:

  

LINQ to Entities无法识别该方法   'DCIS.Code.UserDashboardFileType GetFileType(System.String)'方法,   并且此方法无法转换为商店表达式。

我想这个查询不能被翻译成t-sql查询,但我不知道如何更改我的查询以避免上述错误。提前谢谢......

1 个答案:

答案 0 :(得分:9)

您可以先选择匿名对象,然后构建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()以防止在SQL中翻译GetFileType