2012-11-11 51 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) }; 

也可以撥打.AsEnumerable()之前選擇以防止GetFileType在SQL翻譯。

+0

謝謝你是一個非常有用的答案:) –