C# 使用自定义属性将Datatable映射到列表的通用函数
下面是我的代码,其中我将数据表转换为类列表C# 使用自定义属性将Datatable映射到列表的通用函数,c#,linq,lambda,C#,Linq,Lambda,下面是我的代码,其中我将数据表转换为类列表 var cities = ds.Tables[0].AsEnumerable().Select(c => new City { CityCode = c.Field<object>("CITY_CODE"), CityMid = c.Field<object>("CITY_MID"),
var cities = ds.Tables[0].AsEnumerable().Select(c => new City
{
CityCode = c.Field<object>("CITY_CODE"),
CityMid = c.Field<object>("CITY_MID"),
CityName = c.Field<object>("CITY_NAME"),
CountryCode = c.Field<object>("COUNTRY_CODE"),
StateCode = c.Field<object>("STATE_CODE"),
ActiveFlag = c.Field<object>("ACTIVE_FLG"),
}).ToList();
如何创建一个泛型类来将数据表或映射转换为列表,在上面的示例中,我使用了类City,但是会有任何具有不同属性的类和具有任何列名的数据表。数据类型是Func,一个接受数据行并返回城市的函数:
我所知道的是,我必须返回表达式,但我不明白如何在任何类中返回表达式
c=>new City{…}是Func类型的委托,在某种程度上相当于获取数据行并返回城市的方法。因此,您可以为它创建一个方法
City ConvertToCity(DataRow row) =>
new City
{
CityCode = row.Field<object>("CITY_CODE"),
CityMid = row.Field<object>("CITY_MID"),
CityName = row.Field<object>("CITY_NAME"),
CountryCode = row.Field<object>("COUNTRY_CODE"),
StateCode = row.Field<object>("STATE_CODE"),
ActiveFlag = row.Field<object>("ACTIVE_FLG"),
};
你能澄清一下你所说的任何课程是什么意思吗?你能举个例子说明你想做什么吗?public IEnumerable GetCitiesFuncselector@DaisyShipton任何类都意味着,我正在尝试创建公共方法,这样,如果我使用了另一个类,比如Employee,那么它应该给我我需要的输出required@Satsvelke:所以你会通过一个函数。。。我还是不确定这里少了什么。这就是为什么我要举一个例子来说明您正在努力实现的目标—您希望能够编写什么代码?基本上接受nvoigt的答案,但要使其通用:public IEnumerable GetValues Func selectorI将编辑问题,给我时间是!由于询问者使用.AsEnumerable,lambda表达式的类型将如您所说的Func。如果没有.AsEnumerable,另一个Linq提供程序可能变得相关,并且该提供程序可能需要表达式树而不是普通委托。在这种情况下,类型将是表达式。.Select的后一个重载由IQueryable接口声明,而带有普通委托的重载由其基本接口IEnumerable声明。不确定这是否有助于询问者;他确实提到了大写字母E的单词表达式。实际上,城市阶级及其属性是动态的,阶级可以是动态的Employee@Satsvelke您可以为此目的使用泛型。
var cities = GetCities(c => new City
{
CityCode = c.Field<object>("CITY_CODE"),
CityMid = c.Field<object>("CITY_MID"),
CityName = c.Field<object>("CITY_NAME"),
CountryCode = c.Field<object>("COUNTRY_CODE"),
StateCode = c.Field<object>("STATE_CODE"),
ActiveFlag = c.Field<object>("ACTIVE_FLG"),
});
Func<DataRow, City> myfunc = c => new City
{
CityCode = c.Field<object>("CITY_CODE"),
CityMid = c.Field<object>("CITY_MID"),
CityName = c.Field<object>("CITY_NAME"),
CountryCode = c.Field<object>("COUNTRY_CODE"),
StateCode = c.Field<object>("STATE_CODE"),
ActiveFlag = c.Field<object>("ACTIVE_FLG"),
};
var cities = GetCities(myfunc);
public IEnumerable<T> GetCities(Func<DataRow, T> selector)
{
return ds.Tables[0].AsEnumerable().Select(selector).ToList();
}
City ConvertToCity(DataRow row) =>
new City
{
CityCode = row.Field<object>("CITY_CODE"),
CityMid = row.Field<object>("CITY_MID"),
CityName = row.Field<object>("CITY_NAME"),
CountryCode = row.Field<object>("COUNTRY_CODE"),
StateCode = row.Field<object>("STATE_CODE"),
ActiveFlag = row.Field<object>("ACTIVE_FLG"),
};
var cities = ds.Tables[0].AsEnumerable().Select(ConvertToCity).ToList();