سؤال

How can I do below code with Linq expression in C#.net?

Currently, I am doing this with a foreach loop of DataTable.

I want to do it with LINQ or AsEnumerable() function.

Current C# code:

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")));

}
هل كانت مفيدة؟

المحلول

You can use combination of string.Join and .ToArray() on Enumerable.

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

نصائح أخرى

You can use 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);

Note that i've presumed that isSelected is a bool column and that RecommendID is an int column. Change it accordingly if that's not true. It should give you an idea anyway. It's better to use the DataRow.Field extension method anyway since it is strongly typed and support nullable types.

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

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

        return string.Join(",", recommendIds.ToArray());
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top