2

このコードは、.cshtml ページ内に表示する一意の組織名のリストを取得します。

IEnumerable<dynamic> data = db.Query("Select * from provider 
   where submitter_element = '210300'");  
                            //the 210300 could be any value passed to the query

var items = data.Select(i => new { i.org_name }).Distinct();
   foreach(var name in items){
     <text>@name.org_name<br></text>

のレコードdataはそれぞれ一意ですが、各フィールドのデータには同じ値が含まれています。つまり、複数のプロバイダーが同じ org_name を持っています。

data複数の一意のリストを作成するために、複数回再利用できるようにしたいと考えています。これを @helper に渡して表示したいと思っていました。そのために、私は次のことをしています。

@helper ListBoxDistinctDisplay(IEnumerable<dynamic> queryResult)
{  
   IEnumerable<dynamic> distinctItems = queryResult.Select(i => new { i.org_name }).Distinct();
   foreach(var listItem in distinctItems){
   <text>@listItem.org_name<br></text>
}

次に、.cshtml ページで次のようにします。

@DisplayHelpers.ListBoxDistinctDisplay(data)

...そしてビンゴ、「ビュー」ページに独自のリストが表示されます。

ご覧のとおり、ヘルパー内で .org_name を指定する必要があることを除いて、これは完全に機能します。

私の質問は、フィールド名に関係なくヘルパーを再利用できるように、フィールド名 (org_name) をヘルパーに渡すにはどうすればよいですか?

または...私が気付いていない、まったく異なるアプローチがありますか?

ありがとう!

4

1 に答える 1

0

あなたは動的を使用するのが好きなので、私はそれに固執します。セレクターを渡したい場合があります:

@helper ListBoxDistinctDisplay(IEnumerable<dynamic> queryResult, Func<dynamic, dynamic> selector)
{
    IEnumerable<dynamic> distinctItems = queryResult.Select(x => new {selectedField = selector(x)}).Distinct();
    foreach (var listItem in distinctItems)
    {
        <text>@listItem.selectedField<br/></text>
    }
}

あれを呼べ:

@DisplayHelpers.ListBoxDistinctDisplay(data, x => x.org_name)
于 2013-05-31T12:28:15.593 に答える