总之我需要你的帮助:)。
我有DataTable
,其中包含以下列:
TITLE ADDRESS BRANCH BRANCH1 BRANCH2 BRANCH3
因为我不想执行另一个MySql查询只获取分支,
我想我可以对LINQ
进行DataTable
查询并获得不同的值。
任何人都可以帮助我吗? (Lambda表达首选)
编辑:
如果我不清楚,我需要所有行中的所有分支。
答案 0 :(得分:4)
试试这个: -
var rows = dataTable.AsEnumerable();
rows.Select(x => x["BRANCH"])
.Union(rows.Select(x => x["BRANCH1"]))
.Union(rows.Select(x => x["BRANCH2"]))
.Union(rows.Select(x => x["BRANCH3"]));
这将获取表格中所有BRANCH列的所有值,并使用Union()
a)将它们连接到一个列表中; b)删除重复项,为您提供不同的值。
(注意:Union()
功能会删除重复值。为了保留重复项,可以使用Concat()
代替Union()
)
---编辑---
如果要丢弃空值,请使用用户Where()
,例如: -
var rows = dataTable.AsEnumerable();
rows.Select(x => x["BRANCH"])
.Union(rows.Select(x => x["BRANCH1"]))
.Union(rows.Select(x => x["BRANCH2"]))
.Union(rows.Select(x => x["BRANCH3"]))
.Where(x => x != null);
答案 1 :(得分:1)
定义您自己的IEqualityComparer
public class MyComparer : IEqualityComparer<DataRow>
{
public bool Equals(DataRow x, DataRow y) {
// logic to distinguish the branches
// this is just an example.
return x["BRANCH"] == y["BRANCH"]
&& x["BRANCH1"] == y["BRANCH1"]
&& x["BRANCH2"] == y["BRANCH2"]
&& x["BRANCH3"] == y["BRANCH3"];
}
public int GetHashCode(DataRow obj) {
// logic to distinguish the branches
// this is just an example.
return obj["BRANCH"].GetHashCode() +
obj["BRANCH1"].GetHashCode() +
obj["BRANCH2"].GetHashCode() +
obj["BRANCH3"].GetHashCode() ;
}
}
并使用它
var result = dataTable.AsEnumerable().Distinct(new MyComparer());