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;

変数には、 variablelinqSizesと同じ要素が含まれます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 に答える