LINQ datarow字符串到数组然后进入字符串列表

时间:2012-10-22 18:59:59

标签: c# linq

我有一些代码将循环遍历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);
            }
        }
    }
}

4 个答案:

答案 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();