2011-11-22 58 views
1

我想看看他们是否有任何可能的方式来结合数据源值。数据的结构是一样的,结合数据源值asp.net

Year| Amount Used| Amount Collected | Amount Saved 

我想要做这样它结合是IQueryable<T>数据类型T个数据源什么是相同类型,这将是这个结构,然后将其绑定到一个gridview 。

只有列我不想加在一起是一年,因为我想根据年份来源合并,并且每年也可能不在数据源中。

这怎么可能,唯一的方法是为每个源创建一个foreach语句并手动合并它们?

我在寻找的东西simplier

+0

这些数据表? – JonH

+0

其linq数据集 – Jake

+0

请看看我的答案,您将需要'合并'数据。 – JonH

回答

1

使用LINQ的联合运营两个IQueryable的数据类型组合。我会用union操作的结果创建一个新的变量。从那里逐个分组,并使用一个聚合函数(总和可能是你正在寻找的)来执行计算。

编辑:这里是一个例子。我会告诉你我正在学习LINQ,并且有很多教程(Google是你的朋友)。我一直在学习VB中的LINQ,它与C#有一些不同的语法。我尽我所能在C#中编写示例,但它可能不完全正确,但会给您一个很好的起点。

var unionResult = dataSet1.Union(dataSet2); 

var groupedResult = from r in unionResult 
     group r By r.Year into g 
     Select new 
     { 
      Year = g.Key.Year, 
      TotalUsed = g.Sum(r => r.AmountUsed), 
      TotalCollected = g.Sum(r => r.AmountCollected), 
      TotalSaved = g.Sum(r => r.AmountSaved 
     }; 

如果你正在使用LINQ到数据集的第一行可能需要与被替换:

var unionResult = dataSet1.AsEnumerable().Union(dataSet2.AsEnumerable()); 

这里有一些我一直在使用的资源(谷歌以外)的。 Scott Gu的blog(在右侧点击LINQ标签)。 4 Guys也有很好的多部分系列。

+0

你能举一个例子吗? – Jake

+0

不知道这种方法是否可行,但我最终使用foreach语句来完成,最糟糕的可能是n^2,n是源中的记录数,因为n从不大于30,它们是没有真正的伤害 – Jake