Frage

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

}
War es hilfreich?

Lösung

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

Andere Tipps

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());
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top