0

GridViewASP MVC 3 サイトで Entity Framework を使用して、Linq クエリをデータソースにバインドしようとしています。ただし、2 つのフィールドのセカンダリ テーブルから情報を取得する必要があるため、エラーが発生しています。

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.

専用のビューモデルを作成せずにこれを実行できるようにしたいと考えています。String.JoinLinq クエリ内で使用する代わりの方法はありますか?

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();
4

1 に答える 1

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 クエリはデータベース側ではなくアプリケーション側で実行されるため、ジョブを完了するために必要な任意の演算子を自由に使用できます。もちろん、その前に、結果を可能な限りフィルタリングする必要があります。

于 2013-05-02T16:54:33.153 に答える