Ogn*_*jen 7 c# linq asp.net-mvc linq-to-entities
public ActionResult ReadXMLDevices(int groupID)
{
var query = from k in XMLEntities.unassigneditems
where k.DevOrAcc == true && k.Group == groupID
select k;
var view_query = from i in query
select new GetFreeDevices
{
MArticleNumber = i.ArticleNumber,
MFirmware = i.Firmware,
MGroup = i.Group,
MName = i.Name,
MSoftware = i.SoftwareVersion,
SA = GetNumberOfDevices(i.ArticleNumber,2),
STH = GetNumberOfDevices(i.ArticleNumber,3),
SASTH = GetNumberOfDevices(i.ArticleNumber,7)
};
return PartialView(view_query);
}
public int GetNumberOfDevices(string artNo,int loc)
{
var num_dev = (from k in XMLEntities.deviceview
where k.Reserved == false && k.Sold == false && k.LocationNameId == loc && k.ArticleNumber == artNo
select k).Count();
return num_dev;
}
Run Code Online (Sandbox Code Playgroud)
错误:
LINQ to Entities无法识别方法'Int32 GetNumberOfDevices(System.String,Int32)'方法,并且此方法无法转换为存储表达式.怎么解决这个???
您可以将查询拆分为两个,以确保在调用GetNumberOfDevices()方法之前列表在内存中.您可以通过将结果转换为a List或在本例中为a 来在内存中进行查询List<GetFreeDevices>.这样,LinQ to Entities不必对XML进行任何翻译,您可以使用您的GetNumberOfDevices()方法.
var view_query = (from i in query
select new GetFreeDevices
{
MArticleNumber = i.ArticleNumber,
MFirmware = i.Firmware,
MGroup = i.Group,
MName = i.Name,
MSoftware = i.SoftwareVersion
}).ToList();
var result_query = from i in query
select new GetFreeDevices
{
MArticleNumber = i.MArticleNumber,
MFirmware = i.MFirmware,
MGroup = i.MGroup,
MName = i.MName,
MSoftware = i.MSoftware,
SA = GetNumberOfDevices(i.MArticleNumber,2),
STH = GetNumberOfDevices(i.MArticleNumber,3),
SASTH = GetNumberOfDevices(i.MArticleNumber,7)
};
return PartialView(result_query);
Run Code Online (Sandbox Code Playgroud)
请注意,最后一个语句要求PartialView接受列表或IEnumerable代替IQueryable.