Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ to实体无法识别方法“System.String SetAssetStatus(Int32)”方法_C#_.net_Asp.net Mvc_Linq - Fatal编程技术网

C# LINQ to实体无法识别方法“System.String SetAssetStatus(Int32)”方法

C# LINQ to实体无法识别方法“System.String SetAssetStatus(Int32)”方法,c#,.net,asp.net-mvc,linq,C#,.net,Asp.net Mvc,Linq,我试图在linq select new块内使用函数设置值: var assetList = DbContext.Assets.Where(x => x.IsActive && x.Parent == null); var assets = assetList.Where(x => x.HardwareType_SK != 37 && x.HardwareType_SK != 28 &&

我试图在linq select new块内使用函数设置值:

            var assetList = DbContext.Assets.Where(x => x.IsActive && x.Parent == null);

            var assets = assetList.Where(x => x.HardwareType_SK != 37 && x.HardwareType_SK != 28 && x.IsActive && x.IsVisible && x.Parent == null).OrderBy(x => x.SortOrder).Select(x => new Models.Asset()
            {
                ID = x.Asset_SK,
                Status = SetAssetStatus(x.Asset_SK),
                Description = x.Description,
                AssociatedCNEStatus = "fmc",
                ChildStatus = "fmc",
                NetworkStatus = "",
                Abbreviation = x.Name,
                Number = x.SortOrder.ToString(),
                Name = x.Name,
                Enviroment = "dev",
                IsEmpty = x.AssetType_SK == 8,
                SiteID = x.Site_SK,
                HardwareDescription = x.HardwareType.Description,
                HardwareType_SK = x.HardwareType_SK
            });
这是失败的:

Status = SetAssetStatus(x.Asset_SK),
我的方法:

        public string SetAssetStatus(int assetID)
        {
            //var assetIntID = int.Parse(assetID);
            var problemReportStatuses = DbContext.ProblemReportDetails.Where(x => x.ProblemReport.Asset_SK == assetID).OrderByDescending(x => x.MaintenanceStatus_SK).Select(x => x.MaintenanceStatus_SK).ToList();
            if (problemReportStatuses.Min() == 1)
            {
                return "fmc";
            }
            else if(problemReportStatuses.Min() == 2)
            {
                return "pmc";
            }
            else
            {
                return "nmc";
            }
        }
我得到以下信息:

LINQ to Entities无法识别方法“System.String SetAssetStatusIn32”,并且无法将此方法转换为存储表达式

是否不允许我将数据库值x.Asset_SK传递到我的函数中以供使用


我尝试过使用int.ParseX.Asset_SK和x.Asset_SK.ToString,但出现了相同的错误。

我最终在网上找到的一个解决方法是在LINQ查询中使用AsEnumerable,就在

var assets = assetList.Where(x => x.HardwareType_SK != 37 && x.HardwareType_SK != 28 && x.IsActive && x.IsVisible && x.Parent == null && x.Asset_SK == 49).OrderBy(x => x.SortOrder).AsEnumerable().Select(x => new Models.Asset()

您不能将这样的方法传递给LINQ to Entities或Entity Framework,因为表达式必须能够转换为SQL。因此,我想使用我的函数设置值的唯一方法是在创建列表后使用foreach循环资产列表,并在那里设置值?那会让事情慢一点。