在给定func <t,object> param </t,object>的情况下查找字符串

时间:2010-05-26 14:27:07

标签: c# .net asp.net-mvc

给出此代码

namespace GridTests
{
    public class Grid<T>
    {
        IEnumerable<T> DataSource { get; set; }
        IList<Column> Columns = new List<Column>();

        class Column
        {
            public string DisplayText { get; set; }
            Func<T, object> Rowdata { get; set; }
        }
    }
}

我需要能够遍历列集合并使用DisplayText获取Rowdata的对象值。

由于

2 个答案:

答案 0 :(得分:2)

IEnumerable<object> Search(string yourLookup)
{
    foreach(Column column in yourGridInstance.Columns)
    {
       if(column.DisplayText.Equals(yourLookup, yourStringcomparaisonOptions)
       {
          foreach(T value in yourGridInstance.DataSource)
          {
             yield return column.Rowdata(T);
          }
       }
    }
}

Linq版

 IEnumerable<object> Search(string yourLookup)
 {
      return yourGridInstance.Columns
          .Where(column=>column.DisplayText.Equals(yourLookup, yourStringcomparaisonOptions))
          .SelectMany(c=> yourGridInstance.DataSource.Select(data=>c.RowData(data)));
 }

答案 1 :(得分:1)

你的问题仍然不是很清楚。我不确定您要提供哪个T RowData方法。如果你想在DataSource枚举器中使用每个T运行该方法,你可以这样做。

public void Enumerate(string displayText)
{
     Column column = this.Columns.FirstOrDefault(item => item.DisplayText == displayText);

     if (column != null)
     {
          foreach (T key in DataSource)
          {
               object value = column.Rowdata(key);
               // Do something with your value here.
          }
     }
     else
     {
         throw new ArgumentException("DisplayText not found in Columns.", "displayText");
     }
}