Pergunta

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

}
Foi útil?

Solução

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

Outras dicas

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());
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top