此代码获取在.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)
...和BINGO,我在“查看”页面上得到了我的唯一列表。
完美无缺,除非您看到我必须在帮助器中指示.org_name。
我的问题是如何将字段名称(org_name)传递给帮助程序,以便无论字段名称如何都可以重复使用我的帮助程序?
或者......我不知道有什么完全不同的方法吗?
谢谢!
答案 0 :(得分: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)