LINQ to Entities не распознает метод «System.String SetAssetStatus (Int32)» - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь установить значение с помощью функции внутри блока 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 SetAssetStatus (Int32), и этот метод нельзя преобразовать в выражение хранилища.

Разрешено ли мне передавать значение базы данных (x.Asset_SK) в мою функцию для использования?

Я пытался использовать int.Parse (X.Asset_SK) и x.Asset_SK.ToString (), но та же ошибка ..

1 Ответ

1 голос
/ 25 сентября 2019

Обходной путь, который я наконец нашел в сети, использует AsEnumerable () в моем запросе LINQ, непосредственно перед .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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...