C# LINQ to实体无法识别方法“System.String SetAssetStatus(Int32)”方法
我试图在linq select new块内使用函数设置值: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 &&
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循环资产列表,并在那里设置值?那会让事情慢一点。