linq To DataTable

//将IEnumerable<T>类型的集合转换为DataTable类型 1111
public static DataTable LINQToDataTable<T>(IEnumerable<T> varlist)
{ //定义要返回的DataTable对象
DataTable dtReturn = new DataTable();
// 保存列集合的属性信息数组
PropertyInfo[] oProps = null;
if (varlist == null) return dtReturn;//安全性检查
//循环遍历集合,使用反射获取类型的属性信息
foreach (T rec in varlist)
{
//使用反射获取T类型的属性信息,返回一个PropertyInfo类型的集合
if (oProps == null)
{
oProps = ((Type)rec.GetType()).GetProperties();
//循环PropertyInfo数组
foreach (PropertyInfo pi in oProps)
{
Type colType = pi.PropertyType;//得到属性的类型
//如果属性为泛型类型
if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition()
== typeof(Nullable<>)))
{ //获取泛型类型的参数
colType = colType.GetGenericArguments()[0];
}
//将类型的属性名称与属性类型作为DataTable的列数据
dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
}
}
//新建一个用于添加到DataTable中的DataRow对象
DataRow dr = dtReturn.NewRow();
//循环遍历属性集合
foreach (PropertyInfo pi in oProps)
{ //为DataRow中的指定列赋值
dr[pi.Name] = pi.GetValue(rec, null) == null ?
DBNull.Value : pi.GetValue(rec, null);
}
//将具有结果值的DataRow添加到DataTable集合中
dtReturn.Rows.Add(dr);
}
return dtReturn;//返回DataTable对象
}

转载于:https://www.cnblogs.com/-maomao/p/4645863.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以通过以下步骤实现: 1. 创建一个 DataTable 对象。 ```csharp DataTable dt = new DataTable(); ``` 2. 添加列到 DataTable 对象中。 ```csharp dt.Columns.Add("Name", typeof(string)); dt.Columns.Add("Age", typeof(int)); dt.Columns.Add("Gender", typeof(string)); ``` 3. 向 DataTable 对象中添加数据。 ```csharp dt.Rows.Add("Tom", 20, "Male"); dt.Rows.Add("Lucy", 18, "Female"); dt.Rows.Add("Jack", 22, "Male"); dt.Rows.Add("Lily", 21, "Female"); ``` 4. 使用 LINQDataTable 对象进行过滤。 ```csharp var query = from row in dt.AsEnumerable() where row.Field<string>("Gender") == "Female" select row; ``` 5. 将过滤后的结果绑定到 DataGridView 控件中。 ```csharp dataGridView1.DataSource = query.ToList(); ``` 完整代码如下: ```csharp DataTable dt = new DataTable(); dt.Columns.Add("Name", typeof(string)); dt.Columns.Add("Age", typeof(int)); dt.Columns.Add("Gender", typeof(string)); dt.Rows.Add("Tom", 20, "Male"); dt.Rows.Add("Lucy", 18, "Female"); dt.Rows.Add("Jack", 22, "Male"); dt.Rows.Add("Lily", 21, "Female"); var query = from row in dt.AsEnumerable() where row.Field<string>("Gender") == "Female" select row; dataGridView1.DataSource = query.ToList(); ``` 以上代码将会在 DataGridView 控件中显示两行数据,分别是 Lucy 和 Lily 的信息。 ### 回答2: 编程语言中的选择结构是一种常用的控制结构,用于根据条件的真假来决定程序的执行路径。其中,C语言也提供了丰富的选择结构语法来满足不同的需求。 举个例子来说明C语言中的选择结构,假设我们要写一个程序,根据用户输入的成绩来打印不同的评语。如果成绩大于等于90分,那么打印"优秀";如果成绩在80到89之间,打印"良好";在70到79之间,打印"中等";在60到69之间,打印"及格";小于60分,打印"不及格"。我们可以使用C语言中的if-else语句来实现这个逻辑。 具体的代码如下: ``` #include <stdio.h> int main() { int score; printf("请输入成绩:"); scanf("%d", &score); if (score >= 90) { printf("优秀\n"); } else if (score >= 80 && score < 90) { printf("良好\n"); } else if (score >= 70 && score < 80) { printf("中等\n"); } else if (score >= 60 && score < 70) { printf("及格\n"); } else { printf("不及格\n"); } return 0; } ``` 在上述的代码中,我们使用了if-else和if-else if语句来根据用户输入的成绩来判断并打印相应的评语。当用户输入不同的成绩时,程序会根据条件的真假来选择执行对应的语句块,最终输出相应的评语。 通过这个例子,我们可以看到C语言中选择结构的用法和效果,帮助程序根据不同的条件做出相应的决策,从而实现不同的功能。 ### 回答3: 语言中的"++"运算符可用于将变量的值递增1。例如,假设有一个名为count的变量,其初始值为0。如果我们在程序中使用了“count++”这个表达式,那么这个表达式将会使count的值增加1,即count的值会从0变为1。 在下面的示例中,我们使用C语言编写了一个简单的计数器程序,以更好地说明这一点: ```c #include <stdio.h> int main() { int count = 0; // 声明并初始化计数器变量为0 printf("初始值: %d\n", count); count++; // 递增计数器的值,相当于 count = count + 1 printf("递增后的值: %d\n", count); return 0; } ``` 输出结果将是: ``` 初始值: 0 递增后的值: 1 ``` 在这个示例中,我们首先将count变量初始化为0,然后使用“count++”表达式将count的值递增1,最后打印出递增后的值1。 这是C语言中使用"++"运算符的一个简单例子,它适用于递增变量的值。注意,在C语言中还有其他用法,如“++count”可以直接在递增前获取递增后的值。但总体上,“++”运算符是C语言中常见的一种用于对变量进行递增操作的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值