繁体   English   中英

LINQ 到 Entities 无法识别方法 'System.String SetAssetStatus(Int32)' 方法

[英]LINQ to Entities does not recognize the method 'System.String SetAssetStatus(Int32)' method

我正在尝试使用 linq select new() 块内部的 function 设置值:

            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 到 Entities 无法识别方法 'System.String SetAssetStatus(Int32)' 方法,并且此方法无法翻译成存储表达式

我是否不允许将数据库值 (x.Asset_SK) 传递到我的 function 中使用?

我试过使用 int.Parse(X.Asset_SK) 和 x.Asset_SK.ToString() 但同样的错误..

我终于在网上找到的一种解决方法是在我的 LINQ 查询中使用 AsEnumerable(),就在 .Select() 之前:

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM