如何在C#中将此功能编写为通用扩展方法?

Gil*_*lla 2 c# linq extension-methods anonymous-types dataset

我有以下内容:

using (var dsProperties = GetDataset(SP_GET_APPLES, arrParams))
            {
                var apples= dsProperties.Tables[0].AsEnumerable()
                    .Select(r => new Apple()
                                     {
                                         Color = r[0].ToString(),
                                         Year = r[1].ToString(),
                                         Brand= r[2].ToString()
                                     });

                return apples.ToList();
            }
Run Code Online (Sandbox Code Playgroud)

现在,我希望有一个扩展方法Dataset,我可以将所需Type的参数作为参数传递并获得预期的List...类似于

dsProperties.GetList(Apple); 
Run Code Online (Sandbox Code Playgroud)

也可以用于

using (var dsProperties = GetDataset(SP_GET_ORANGES, arrParams)){     
dsProperties.GetList(Orange); }
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个目标?

Mik*_*erg 7

这个怎么样?

static IEnumerable<T> GetList<T>(this DataSet dataSet, Func<DataRow, T> mapper) {
   return dataSet
      .Tables[0]
      .AsEnumerable()
      .Select(mapper);
}
Run Code Online (Sandbox Code Playgroud)

用法:

dsProperties.GetList<Apple>(r => 
   new Apple {
      Color = r[0].ToString(),
      Year = r[1].ToString(),
      Brand= r[2].ToString()
});
Run Code Online (Sandbox Code Playgroud)

这种映射也可以放在另一个地方.