Прахадныя Стоўбцы LINQ запытаў (не радкі)

Ці можна, і калі так, то як, у цыкле, хоць вынікі запыту LINQ?

Нешта накшталт гэтага:

var results= from a in dt.AsEnumerable()
                    where a.Field("id") == i 
                    select new 
                    {
                       id= a.Field("id"),
                       a= a.Field("a"),
                       b = a.Field("b")
                    };

IEnumerable colNames = results.First().GetType().GetProperties()
                                                        .Select(p => p.Name);

string[] columns = colNames.ToArray();

int i = 0;
foreach (var row in results)
{
    for (int i = 0; i < columns.Count(); i++)
    {
        string foobar = (string)row[columns[i]];
        i++;
    }
}

Па сутнасці, я хачу паўтарыць наступны выгляд функцыянальнасці:

DataRow dr = new DataRow();
string foobar = dr[columns[i];

Дзякуй усім загадзя.

5
можа быць, гэты адказ дапаможа вам stackoverflow.com/ пытанні/1882935/& hellip;
дададзена аўтар Ivan Crojach Karačić, крыніца
Вы павінны кінуць, таму `радок FOOBAR = (радок) Д-р [слупкі [я];
дададзена аўтар xanatos, крыніца
@xantos, добры момант, добра зроблена.
дададзена аўтар CatchingMonkey, крыніца

2 адказы

Калі ў вас ёсць магчымасць змяніць зыходнае заяву LINQ, каб вырабіць структуру дадзеных, якая дазваляе вам рабіць тое, што вы шукаеце, я б пэўна выказаць здагадку, што.

Калі няма, то вы павінны будзеце выкарыстоўваць адлюстраванне для прагляду уласцівасцяў вашага ананімнага тыпу па імі, а затым атрымаць значэнне гэтых уласцівасцяў пры адлюстраванні:

    PropertyInfo[] columns = results.First().GetType().GetProperties();
    ...
            string foobar = columns[i].GetValue(row, null);
4
дададзена
@CatchingMonkey: Глядзіце маё абнаўленне
дададзена аўтар StriplingWarrior, крыніца
Я на самой справе няма атрымалі магчымасьць ня. Тым не менш, я выкарыстаў крыху адлюстравання для атрымання уласцівасцяў, я проста не ведаю, што цяпер з імі рабіць!
дададзена аўтар CatchingMonkey, крыніца
Action processColumName = (cname) => 
                           { 
                             //do anything you want with a column name
                              string foo = (string) Row[cname]; 
                           };

results.First()
        .GetType()
        .GetProperties()
        .Select(p => p.Name)
        .ToList().ForEach(processColumName);
3
дададзена