Linq into子句仅返回联接表中的列

时间:2019-06-05 15:52:20

标签: c# linq

我加入了一个基于EMP列的2个数据表,并使用了copytodatatable,但是当我将新数据表加载到datagridview时,它仅显示查询中的合并列(salarydt),这是为什么?

<systemPath>${tools.jar}</systemPath>

2 个答案:

答案 0 :(得分:2)

DataTable本身非常适合使用其Merge方法与另一个数据表合并。这是一个小例子:

var dt1 = new DataTable("a");
dt1.Columns.Add("ID", typeof(int));
dt1.Columns.Add("Item1", typeof(int));
dt1.PrimaryKey = new[] { dt1.Columns[0] };

var dt2 = new DataTable("a");
dt2.Columns.Add("ID", typeof(int));
dt2.Columns.Add("Item2", typeof(int));
dt2.PrimaryKey = new[] { dt2.Columns[0] };


for (int i = 0; i < 10; i++)
{
    dt1.Rows.Add(new object[] { i, i });
    dt2.Rows.Add(new object[] { i, i + 10 });
}

dt1.Merge(dt2);

现在dt1有三列IDItem1Item2

ID  Item1   Item2
0   0       10
1   1       11
2   2       12
3   3       13
4   4       14
5   5       15
6   6       16
7   7       17
8   8       18
9   9       19

答案 1 :(得分:1)

也许您应该做的只是返回自定义项目列表:

选项1

var data = new Employee[] { new Employee { Id = 1, Name = "John Doe" } };

var data2 = new Salary[] { new Salary { Id = 1, Wage = "$ 50,000.00" } };

var collection = from p in data
                   join q in data2 on p.Id equals q.Id              
                   select new { Id = p.Id, Name = p.Name, Wage = q.Wage };

请检查示例:link

选项2

var data = new Employee[] { new Employee { Id = 1, Name = "John Doe" } };

var data2 = new Salary[] { new Salary { Id = 1, Wage = "$ 50,000.00" } };

var collection = from p in data
                   join q in data2 on p.Id equals q.Id              
                   select new { p, q };