【发布时间】:2013-03-19 01:29:33
【问题描述】:
我有一个这样的数据表(示例):
当前文本 当前值 旧文本 旧值 ------------------------------------------ 测试 1 1 旧测试 1 1 测试2 2 旧测试2 2我想做一个联合所以结果看起来像这样
文本值 IsCurrent 测试1 1 真 测试2 2 真 OldTest1 1 错误 OldTest2 2 错误我现在怎么做:
var lst = dt.AsEnumerable().Select(x => new MyClass
{
Text = x.Field<string>("CurrentText"),
Value = x.Field<string>("CurrentValue"),
IsCurrent=true
})
.Union(dt.AsEnumerable().Select(x => new MyClass
{
Text = x.Field<string>("OldText"),
Value = x.Field<string>("OldValue"),
IsCurrent=false
})
).Distinct().ToList();
我唯一的问题是:有更好/更快的方法吗?
【问题讨论】:
-
在我看来,您从
dt开始并将其投影到IsCurrent的两个变体中,然后将它们合并。我不清楚您要完成什么,因为这两个序列是相同的,除了一组将具有true而另一组将具有false用于IsCurrent。那是你真正想要做的吗? -
@KirkWoll,不,序列会有所不同,因为我正在尝试合并不同的列。所以,基本上我想将两列附加到另外两列。
-
这很好,但是您应该真正修改您的代码以说明这种区别。现在我可以提供一个更清晰的答案,但我怀疑它会有所帮助。我真的需要看看你实际上是如何创建不同的序列的。
-
@KirkWoll,我想我不关注你。区别在于我的第一个数据集选择:
x.Field<string>("CurrentText")和x.Field<string>("CurrentValue"),而第二个数据集选择:x.Field<string>("OldText")和x.Field<string>("OldValue") -
抱歉,你说得对。我在第一次扫描时错过了。