我有一些代码将循环遍历DataRow
并将DataRow
中的竖线分隔列拆分为数组,然后分成List<string>
。
使用LINQ有更好的方法吗?我已经尝试但无处可去!
List<string> allSizes = new List<string>();
foreach (DataRow resultRow in results.Rows)
{
if (resultRow["Sizes"] != DBNull.Value)
{
string[] sizes = resultRow["Sizes"].ToString().Split('|');
foreach (string size in sizes)
{
if (!allSizes.Contains(size))
{
allSizes.Add(size);
}
}
}
}
答案 0 :(得分:9)
var allSizes = results.Rows.Cast<DataRow>()
.Where(row => row["Sizes"] != DBNull.Value)
.SelectMany(row => row["Sizes"].ToString().Split('|'))
.Distinct()
.ToList();
答案 1 :(得分:0)
以下是LINQ版本,但我个人认为它不太清晰:
var allSizes = new List<string>();
foreach (
string size in
from DataRow resultRow in results.Rows
where resultRow["Sizes"] != DBNull.Value
select resultRow["Sizes"].ToString().Split('|') into sizes
from size in sizes where !allSizes.Contains(size)
select size) {
allSizes.Add(size);
}
答案 2 :(得分:0)
像这样。
var linqSizes =
from row in results.Rows
where row["Sizes"] != DBNull.Value
let sizes = row["Sizes"].ToString().Split('|')
from size in sizes
group size by size into g
select g.Key;
变量linqSizes
将包含与变量allSizes
相同的元素。
答案 3 :(得分:0)
强类型DataRow和LINQ:
dt.Rows.OfType<DataRow>().Where(r => r["Sizes"] != DBNull.Value)
.SelectMany(r=>r.Field<string>("Sizes").Split('|')
.Distinct().ToList();