2

我有一些代码将遍历DataRows 并将 中的管道分隔列拆分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);
            }
        }
    }
}
4

4 回答 4

9
var allSizes = results.Rows.Cast<DataRow>()
    .Where(row => row["Sizes"] != DBNull.Value)
    .SelectMany(row => row["Sizes"].ToString().Split('|'))
    .Distinct()
    .ToList();
于 2012-10-22T19:05:36.230 回答
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);
}
于 2012-10-22T19:08:17.293 回答
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

于 2012-10-22T19:14:24.120 回答
0

强类型 DataRow 和 LINQ:

dt.Rows.OfType<DataRow>().Where(r => r["Sizes"] != DBNull.Value)
      .SelectMany(r=>r.Field<string>("Sizes").Split('|')
      .Distinct().ToList();
于 2012-10-22T19:14:37.967 回答