2012-01-11 9 views
2

私はASP.NET 3.5、LLBLGenPro 3.0、およびDevExpress 10.1.7を使用しています。 LinqServerModeDataSourceを持つASPxGridViewがあります。 ASPxGridViewの各行は、LLBLGenProのTaskEntityに対応しています。 TaskEntityのプロパティの1つは、関連するOrganizationEntitiesのコレクションであるOrganizationCollectionです。私は何をしたいのですか?OrgListというASPxGridViewに列を追加すると、関連組織の一覧が名前で表示されます(理想的には<br> -delimitedリストにあるので、各項目はそれぞれの行に表示されます)。カラムがEncodeHtmlプロパティが "False"に設定されている場合に機能します)。ASPxGridViewの1つのセルにアイテムの集合を集約する方法

IQueryable<TaskEntity> taskQuery; 

taskQuery = TaskQueryStore.GetTasks(...); 

var query = from task in taskQuery 
      select new 
        { 
         task.Id, 
         task.TaskName, 
         OrgList = ??? 
        } 

e.KeyExpression = "Id"; 
e.QueryableSource = query; 

これまでのところ、私は以下の結果と、「???」のためのいくつかのことを試してみました:現在、私はlsmdsTasks_Selecting()イベント(これは単純化した例である)にしている

まず、私が試した:

OrgList = task.OrganizationCollection.Aggregate("", (acc, item) => (acc == "" ? "" : acc + "<br>") + item.OrgName) 

を。これは、次のORMExceptionくれた:「『集約』がこれのLINQプロバイダではサポートされていないメソッドを使用してクエリを書き換えてみてくださいサポートされています。

その後、私が試した:

OrgList = String.Join("<br>", task.OrganizationCollection.Select(x => x.OrgName).ToArray()) 

これは私に次のようORMExceptionました:「知られているマップされたデータベース関数または他の既知のハンドラを持っていない 『参加』にメソッドの呼び出しを」種類の働いている

唯一のことはされています:

OrgList = GetOrgList(task.Id) 

し、タスクIDを受け取り、私はそれをしたい形式でリストを作成し、としてそれを返す別途GetOrgList()メソッドを定義します文字列。これは実際に私が望むようにグリッドのデータを表示しましたが、このカラムをソートしようとすると正しく機能しません。また、オートフィルタを使用してこのカラムをフィルタリングしようとすると、すべてに関係なく、すべての。さらに、必要以上にデータベースに数回余計に当たると思います。

ソートとフィルタリングをそのまま使用する方法はありますか?または、この列のこれらの機能を無効にする必要がありますか?

+0

このコラムの作業にソートする必要がありますか? – Filip

+0

この列で返される最終的な文字列に基づいてソートすることができます。つまり、列の1つのセルの値が「A
B
C」で、2番目が「B
C
D」の場合、文字列として扱うだけの値に基づいて並べ替えます。 – RebelScum

+1

LLBLGen Proを使ってORMを生成していますか? (LLBLGen Proランタイムフレームワーク3.1、Entity Framework v1、Entity Framework v4、Linq to Sql、NHibernate 2.x/3.0(hbm.xmlおよびFluentNHibernate)) – JamieSee

答えて

0

PrefetchPathをOrganizationにしてタスクをフェッチし、次にLinq2Objectsのメモリ内クエリでAggregateを使用し、結果のリストをグリッドのデータソースに渡して、それがうまくいった。

2

リピータ付きテンプレートを使用してください。データ結合を使用して、列からリピーターにOrgListを渡すことができます。このような

何か:

<asp:Repeater runat="server" ID="repeater" Datasource='<%# OrgList %>'> 
... 
関連する問題