C# 如何选择LINQ数据表联接中的所有列?
我想在SQL Server内部联接查询中选择两个表状联接的所有列 另外 如何将两个表的整个结果转换为数据表C# 如何选择LINQ数据表联接中的所有列?,c#,linq,C#,Linq,我想在SQL Server内部联接查询中选择两个表状联接的所有列 另外 如何将两个表的整个结果转换为数据表 var collection = from t1 in dt1.AsEnumerable() join t2 in dt2.AsEnumerable() on t1["id"] equals t2["id"] select new { Name = t1["name"], Group =
var collection = from t1 in dt1.AsEnumerable()
join t2 in dt2.AsEnumerable()
on t1["id"] equals t2["id"]
select new { Name = t1["name"], Group = t2["group"] };
然后
编辑:
类似的东西
var collection = from t1 in dt1.AsEnumerable()
join t2 in dt2.AsEnumerable()
on t1["id"] equals t2["id"]
select new { T1 = t1, T2 = t2 };
这会奏效的。但是,如果dt1和dt2使用完全相同的名称共享多个列,则可能会丢失一些数据。虽然无法将它们展开为列,但只需返回实体即可。例如:
//clone dt1, copies all the columns to newTable
DataTable newTable = dt1.Clone();
//copies all the columns from dt2 to newTable
foreach(var c in dt2.Columns)
newTable.Columns.Add(c);
//now newTable has all the columns from the original tables combined
//iterates over collection
foreach (var item in collection) {
//creates newRow from newTable
DataRow newRow = newTable.NewRow();
//iterate the columns, gets values from either original table if column name is there
foreach(var c in newTable.Columns)
newRow[c.ColumnName] = item.T1.ContainsColumn(c.ColumnName) ? item.T1[c.ColumnName] : item.T2[c.ColumnName];
newTable.Rows.Add(newRow);
}
如果您需要将其展平,那么您必须自己编写映射,但这仍然是非常琐碎的
引用自:
如果要投影到展开类型中,则必须手动指定每个类型。您的另一个选择是让您的组合类型包含这两个对象,对象自然会带来它们的属性
select new { CTLJCRJOB, CTLRFDSTM }
您可以像myObj.Object1.Property1、myObj.Object2.Property4这样使用它
最后一个仍然需要手工操作的选项是定义一个合适的类型,并使用构造函数或生成器方法将对象属性分割成扁平类型。您仍然执行手动映射,但将其与查询逻辑隔离
select new
{
Object1 = object1,
Object2 = output
};
引用自
希望这将有帮助您可以在
选择新{…}
中列出两个表中所需的所有属性,这样我就可以逐个访问行了:(我想将结果转换为数据表。如何将两个表的整个结果转换为数据表?代码段完成。我强烈建议您使用自动化程度较低的版本(从内部联接手动命名每个列)。正如我在回答中提到的,如果dt1和dt2具有同名的列,它将只获取其中一个(dt1)的值而不是另一个。你不应该发布仅链接的答案,因为如果粘贴在此处的URL已失效,则该答案将无效。请参考。感谢指出我的错误,我从不知道存在此类协议。即使@DesertFox已经给出了答案,我仍将编辑我的答案。我的表包含62列。如何逐个指定类似于此的列?名称、组等不过,最好使用和SP或基本查询检索数据,然后将它们作为对象进行操作
select new CombinedType(object1, output);
//or
select builder.GetCombinedType(object1, output);
var collection = (from t1 in dt1.AsEnumerable()
join t2 in dt2.AsEnumerable()
on t1 ["id"] equals t2 ["id"]
select new { Name = t1 ["name"], Group = t2 ["group"] }).ToList() ;