LINQ,将列选择为IEnumerable<DataRow>

4

我该如何在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")}  ;

这个不起作用。我正在尝试选择一些列作为新的数据表,然后将其与其他数据表联接。

1个回答

10

你可以使用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();

一个更为简单的解决方案,不需要外部库,是创建一个 DataTable (如果你还没有),并按照以下方式填充:

// 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

很好,加入了另一种解决方案。更好,更干净。看起来是你想要的,对吧? :) - Artiom Chilaru
(1/2) 你好 @ArtiomChilaru
我有一个稍微不同的情况。想要一个新的数据表格作为输出,其中包含来自两个数据表格的行值。我已经使用了连接操作。 dtMain:
ID | Company 1 | XYZ 2 | PQR dtDetails:
ID | ParentID (FK) | Amount 1 | 1 | 11 2 | 1 | 12 3 | 2 | 44 所需输出: ID | Company | Amount 1 | XYZ | 11 1 | XYZ | 12 2 | PQR | 44 继续...
- nirav
我写的LINQ查询:
var query = (from M in dtMain.AsEnumerable() join D in dtDetails.AsEnumerable() on Convert.ToString(M["ID"]) equals Convert.ToString(D["ParentID"]) select new { Convert.ToString(M["ID"]), Convert.ToString(M["Company"]), Convert.ToString(D["Amount"]) }); 我能够得到 List<string[]>
你能告诉我如何得到 DataTable 吗?(我尝试过获取 DataRow[] 但它没有起作用)。
- nirav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接