9

次の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クエリに変換できないと思いますが、上記のエラーを回避するためにクエリを変更する方法がわかりません。前もって感謝します...

4

1 に答える 1

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

また、select の前に呼び出して、SQL での変換.AsEnumerable()を防ぐこともできます。GetFileType

于 2012-11-11T16:31:19.863 に答える