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 回答