c# - linq,选择列作为 IEnumerable<DataRow>

标签 c# .net linq ado.net

我如何在 linq 中做:

IEnumerable<DataRow> query = 
        from rec in dt.AsEnumerable() 
        where rec.Field<decimal>("column2") == 1 && foo(rec.Field<decimal>("column1"))
        select new {
            column1 = rec.Field<decimal>("column1"),
            column2 = rec.Field<decimal>("column2"),
            column3 = rec.Field<decimal>("column3")}  ;

这是行不通的。我正在尝试选择一些列作为新数据表,然后稍后将其与其他一些数据表连接起来。

最佳答案

您可以使用 http://code.msdn.microsoft.com/LinqEntityDataReader 然后像这样选择您的值:

DataTable query = 
        (from rec in dt.AsEnumerable() 
        where rec.Field<decimal>("column2") == 1 && foo(rec.Field<decimal>("column1"))
        select new {
            column1 = rec.Field<decimal>("column1"),
            column2 = rec.Field<decimal>("column2"),
            column3 = rec.Field<decimal>("column3")}).ToDataTable();

一种不需要外部库的更简单的解决方案是创建一个数据表(如果您还没有),并按如下方式填充它:

// declaring a data table.. Replace it with whatever code you want
var table = new DataTable();
table.Columns.Add("column1", typeof(Decimal));
table.Columns.Add("column2", typeof(Decimal));
table.Columns.Add("column3", typeof(Decimal));

// Populate the table
(from rec in dt.AsEnumerable() 
where rec.Field<decimal>("column2") == 1 && foo(rec.Field<decimal>("column1"))
select new {
    column1 = rec.Field<decimal>("column1"),
    column2 = rec.Field<decimal>("column2"),
    column3 = rec.Field<decimal>("column3")})
    .Aggregate(table, (dt, r) => { dt.Rows.Add(r.column1, r.column2, r.column3); return dt; });

// at this point your table variable is populated

关于c# - linq,选择列作为 IEnumerable<DataRow>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2673755/

相关文章:

c# - 创建具有匿名类型的 Stack<T>

c# - 如何根据元素的位置使用 Linq 重命名数据?

c# - 正确使用DBNull

c# - 从 DataGridView 中删除行时出现意外行为

c# - 为什么这个例子中的队列锁是必要的

c# - JSON反序列化Stack结构颠倒顺序

c# - 如何在.Net Core中使用REST API访问azure表存储

c# - 是否有等同于 SQL Server newsequentialid() 的 .NET

c# - 方法名中使用 "Async"后缀是否取决于是否使用 'async'修饰符?

c# - 将 Enum.GetName(...) 合并到 Linq 查询中