簡體   English   中英

在LINQ查詢的select部分內調用一個方法

[英]Call a method inside the select part of a LINQ query

我有以下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查詢,但我不知道如何更改我的查詢以避免上述錯誤。 提前致謝...

您可以先選擇匿名對象,然后構造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之前調用.AsEnumerable()來防止在sql中翻譯GetFileType

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM