我和before.有同样的问题我还在使用相同的样本。
DataTable table = new DataTable();
table.Columns.Add("column1", typeof(int));
table.Columns.Add("column2", typeof(int));
table.Columns.Add("column3", typeof(string));
table.Rows.Add(1, 0, "a");
table.Rows.Add(2, 1, "b");
table.Rows.Add(3, 1, "c");
table.Rows.Add(4, 3, "d");
table.Rows.Add(5, 3, "e");
我这样做是为了返回column3的值,其column1中的值也出现在column2中:
var x = (from t1 in table.AsEnumerable()
select t1.Field<int>(0)).Intersect
((from t2 in table.AsEnumerable()
select t2.Field<int>(1)).Distinct());
如何根据上面的LINQ获取column3的值?
我可以使用接受的答案here:
var result = (from t1 in table.AsEnumerable()
join t2 in table.AsEnumerable() on t1.Field<int>(0) equals t2.Field<int>(1)
虽然我认为我不能在第一个LINQ的反面使用它,这可以翻译为&#39;返回column3的值,其值在column1 出现在第2列中。&#39;但是,我可以将上面的LINQ更改为Except()
而不是Intersect()
。我只需要知道如何使用var x
来获取行集合或只获取column3的值。
答案 0 :(得分:0)
这些可以给你你想要的东西:
// collection of datarows
var rows = table.AsEnumerable().Where(i => i.Field<int>(0) == i.Field<int>(1));
// collection of strings (field 3 of rows)
var rowvalues = rows.Select(j => j.Field<string>(3));