我试图在我的ASP MVC 3站点中使用Entity Framework将Linq查询绑定到GridView
数据源。但是,因为我需要从二级表中提取信息,因为我收到错误的两个字段
LINQ to Entities does not recognize the method 'System.String Join(System.String, System.Collections.Generic.IEnumerable'1[System.String])' method, and this method cannot be translated into a store expression.
我希望能够在不创建专用视图模型的情况下完成此操作。是否有在Linq查询中使用String.Join
的替代方法?
var grid = new System.Web.UI.WebControls.GridView();
//join a in db.BankListAgentId on b.ID equals a.BankID
var banks = from b in db.BankListMaster
where b.Status.Equals("A")
select new
{
BankName = b.BankName,
EPURL = b.EPURL.Trim(),
AssociatedTPMBD = b.AssociatedTPMBD,
FixedStats = String.Join("|", from a in db.BankListAgentId
where a.BankID == b.ID &&
a.FixedOrVariable.Equals("F")
select a.AgentId.ToString()),
VariableStats = String.Join("|", from a in db.BankListAgentId
where a.BankID == b.ID &&
a.FixedOrVariable.Equals("V")
select a.AgentId.ToString()),
SpecialNotes = b.SpecialNotes,
};
grid.DataSource = banks.ToList();
grid.DataBind();
答案 0 :(得分:1)
如果你并不过分担心性能(因为它有子查询,它可能会对数据库产生n + 1个查询,如果数据库行很大,你可能会获取不必要的数据),最简单的解决方法是添加AsEnumerable()
以在Web /应用程序端执行String.Join;
var banks = (from b in db.BankListMaster
where b.Status.Equals("A") select b)
.AsEnumerable()
.Select(x => new {...})
在调用AsEnumerable()
时,Linq查询的其余部分将在应用程序端而不是数据库端完成,因此您可以自由使用所需的任何运算符来获取作业完成。当然,在此之前,您需要尽可能过滤结果。