2012-11-11 6 views
9

の選択部分の内側メソッドを呼び出して、私は、次のLINQクエリを持っている:は、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 does not recognize the method 'DCIS.Code.UserDashboardFileType GetFileType(System.String)' method, and this method cannot be translated into a store expression.

が、私はこのクエリは、T-SQLクエリに変換することができないことを想像しますが、私は何を上記のエラーを回避するために私のクエリを変更する方法を知らない。ありがとうございます...

答えて

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

また、あなたは、SQLに翻訳するGetFileTypeを防ぐために選択する前に.AsEnumerable()を呼び出すことができます。

+0

本当に便利な答えはありがとうございました:) –