替代在Linq查询中使用String.Join

时间:2013-05-02 16:02:02

标签: asp.net-mvc asp.net-mvc-3 linq entity-framework entity-framework-4.1

我试图在我的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();

1 个答案:

答案 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查询的其余部分将在应用程序端而不是数据库端完成,因此您可以自由使用所需的任何运算符来获取作业完成。当然,在此之前,您需要尽可能过滤结果。