调用的方法的LINQ查询的选择部分内 [英] Call a method inside the select part of a LINQ query

查看:168
本文介绍了调用的方法的LINQ查询的选择部分内的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下的LINQ查询:

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是返回枚举类型的方法。有没有语法错误,但是当我运行该项目(这是一个MVC 4 web项目),我收到以下错误:

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到实体无法识别方法
位DCIS.Code.UserDashboardFileType GetFileType(System.String)'方法,
和这种方法不能被翻译成商店表达

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查询,但我不知道如何改变我的查询,以避免上述错误。在此先感谢...

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...

推荐答案

您可以先选择匿名对象,然后构建 UserDashboardFile

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



您也可以拨打 .AsEnumerable()之前选择以防止 GetFileType 在SQL进行翻译。

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

这篇关于调用的方法的LINQ查询的选择部分内的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆