如何使用Linq表达式转换Foreach循环或在C#.net中转换AsEnumerable?

时间:2014-01-23 12:34:42

标签: c# asp.net performance linq linq-to-objects

如何使用C#.net?

中的Linq表达式执行下面的代码

目前,我正在使用DataTable的foreach循环。

我想用LINQ或AsEnumerable()函数来做。

当前的C#代码

protected String GetRecommendMasterSquence() 
{
    ArrayList strItems = new ArrayList();
    DataTable dt = new DataTable();
    foreach(DataRow dr in dt.Rows) {
        if (Convert.ToBoolean(dr["isSelected"])) {
            strItems.Add(Convert.ToString(dr["RecommendID"]));
        }
    }
    return string.Join(",", (string[]) strItems.ToArray(Type.GetType("System.String")));

}

4 个答案:

答案 0 :(得分:3)

您可以在Enumerable上使用string.Join.ToArray()的组合。

string str = string.Join(",", dt.AsEnumerable()
                                .Where(r => r.Field<bool>("isSelected"))
                                .Select(c=>c.Field<string>("RecommendID"))
                                .ToArray());

答案 1 :(得分:2)

您可以使用table.AsEnumerable + Enumerable.Where

var selectedRecommendIDs = dt.AsEnumerable()
    .Where(r => r.Field<bool>("isSelected"))
    .Select(r => r.Field<int>("RecommendID"));
string result = string.Join(",", selectedRecommendIDs);

请注意,我假设isSelectedbool列,而RecommendIDint列。如果不是这样的话,相应地改变它。无论如何它应该给你一个想法。最好使用DataRow.Field扩展方法,因为它是强类型的并且支持可空类型。

答案 2 :(得分:0)

var ids = dt.Rows
       .Where(x => !Convert.ToBoolean(x["isSelected"]))
       .Select(x => Convert.ToString(x["RecommendID"]))

return string.Join(",", ids);

答案 3 :(得分:0)

        var recommendIds = 
            from myRow in dt.AsEnumerable()
            where myRow.Field<bool>("isSelected") == true
            select myRow.Field<string>("RecommendID");

        return string.Join(",", recommendIds.ToArray());