Call a method inside the select part of a LINQ query

c#, entity-framework, linq-to-entities

Solution

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

Also you can call `.AsEnumerable()` before select to prevent `GetFileType` to be translated in sql.

Problem

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 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 to Entities does not recognize the method 'DCIS.Code.UserDashboardFileType GetFileType(System.String)' method, and this method cannot be translated into a store expression. 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...

Original source