【发布时间】:2013-08-15 16:23:03
【问题描述】:
我的问题也类似THIS
我有两个数据表:
数据表 1:
Column 1: Date
Column 2: Requests 1
数据表2:
Column 1: Date
Column 2: Requests 2
我需要下面的结果:
新数据表:
Column 1: Date
Column 2: Requests 1
Column 3: Requests 2
预期结果:
Date Requests 1 Requests 2 Total
15/08/2013 25 40 60
14/08/2013 40 60 100
13/08/2013 40 0 25
12/08/2013 0 80 80
到目前为止我做了什么:
DataTable Lista_1 = ds.Tables[0];
DataTable Lista_2 = ds.Tables[1];
var myLINQ = from l1 in Lista_1.AsEnumerable()
join l2 in Lista_2.AsEnumerable()
on l1.Field<DateTime>("Date") equals l2.Field<DateTime>("Date")
select new
{
dateRelatorio = l1.Field<DateTime>("Date"),
request1Relatorio = l1.Field<int>("Total"),
request2Relatorio = l2.Field<int>("contagem"),
total = l1.Field<int>("Total") + l2.Field<int>("contagem")
};
我想返回一个 IList 集合 (System.Collections.IList)
更新
listReturn = new List<Stats>();
public class Stats
{
public DateTime dateRelatorio { get; set; }
public int request1Relatorio { get; set; }
public int request2Relatorio { get; set; }
public int total { get; set; }
}
更新 2
可能在 List_1 中有日期在 List_2 中没有,反之亦然,因此 Request 需要为 0。
【问题讨论】:
-
代码好像没问题,加
.ToList() -
一个
Ilist<OfWhat>?您不能从该方法返回匿名类型。 -
如果第一个表中有 3 行日期为
15/08/2013而第二个表中有两行日期相同怎么办?结果表需要 6 行? -
要使用
LINQ to DataSet,您必须将其转换为Enumerable stuff,但要返回DataTable,据我所知您必须使用CopyToDataTable(),但这种方法似乎没有支持匿名类型(以 3 列作为属性)。我认为您无法使用LINQ解决此问题。 -
@KingKing:
CopyToDataTable仅适用于IEnumerable<DataRow>。但是,您可以在反射的帮助下使其与任何东西一起工作(效率不高):msdn.microsoft.com/en-us/library/bb669096.aspx
标签: c# linq linq-to-sql datatable dataset