Dhe*_*eyv 5 linq c#-4.0 asp.net-mvc-3
我有一个LINQ查询与自定义模型.我只是想使用一种方法为模型属性赋值.但是当我尝试使用自定义模型时,它会抛出一些错误消息,如下所示:
LINQ to Entities无法识别方法'System.String GetPONo(Ent,System.String)'方法,并且此方法无法转换为商店表达式.
码
var model = (from p in db.PoDetails
select new porders
{
Category = p.Category,
PONO = GetPONo(p, p.Category),
}).ToList();
Run Code Online (Sandbox Code Playgroud)
方法
public string GetPONo(PoDetail p, string ASD)
{
if (ASD == "B")
{
var PoNo = (from pord in db.Porders where pord.Id == p.PoId select pord.No).FirstOrDefault();
return PoNo;
}
else
{
var PoNo = (from porder in db.Porders
where porder.Id == (from rec in db.RecommendResources where rec.Id == p.BibId select rec.PoId).FirstOrDefault()
select porder.No).FirstOrDefault();
return PoNo;
}
}
Run Code Online (Sandbox Code Playgroud)
这是因为LINQ to Entities在后台被转换为SQL.当然GetPONo(p, p.Category),SQL中没有方法,因此您的代码将失败.您可以通过调用ToList()强制查询在您的之前运行来解决此问题select.
var model = (from p in db.PoDetails select p).ToList();
model = from m in model
select new porders
{
Category = m.Category,
PONO = GetPONo(m, m.Category)
};
Run Code Online (Sandbox Code Playgroud)
您可以在这里查看我对类似问题的回答
您可以使用三元运算符根据类别值对 PONO 执行不同的子查询
var model = (from p in db.PoDetails
select new porders
{
Category = p.Category,
PONO = p.Category == "B" ?
(from pord in db.Porders
where pord.Id == p.PoId
select pord.No).FirstOrDefault() :
(from porder in db.Porders
where porder.Id == (from rec in db.RecommendResources
where rec.Id == p.BibId
select rec.PoId).FirstOrDefault()
select porder.No).FirstOrDefault()
}).ToList();
Run Code Online (Sandbox Code Playgroud)
您也可以为此创建存储过程。
| 归档时间: |
|
| 查看次数: |
2865 次 |
| 最近记录: |