LINQ Query Result - динамически получить значение поля из переменной имени поля - PullRequest
0 голосов
/ 17 июня 2011

LINQ новичок здесь

Я пытаюсь получить значение поля - используя переменную fieldName.Если я наблюдаю за строкой [FieldName], я получаю значение - но когда я делаю это в реальном коде, оно не компилируется.

string fieldName = "awx_name"

List<awx_property> propertyQry = 
            (
                from property in crm.awx_propertyawx_properties
                where property.awx_propertyid == new Guid(id)
                select property
            ).ToList();

            foreach (awx_property row in propertyQry)
            {
//THIS DOES NOT WORK
fieldValue = row[fieldName];   
}

Заранее спасибо.Также приветствуются альтернативы

Ответы [ 2 ]

1 голос
/ 17 июня 2011

Вы заставляете нас догадываться, что вы пытаетесь сделать здесь ... Вам нужно указать типы объектов, чтобы нам было легко понять и помочь.Во всяком случае, я думаю, что вы пытаетесь получить объект на основе идентификатора.Так как вы получаете по Id, я предполагаю, что возвращаемое значение будет одним объектом.

var propertyObj =( from property in crm.awx_propertyawx_properties
                      where property.awx_propertyid == new Guid(id)
                      select property
                    ).SingleOrDefault();
   if(propertyObj != null) {
     fieldValue = propertyObj.GetType().GetProperty(fieldName).GetValue(propertyObj, null);
   }

Конечно, вам нужно добавить проверку, чтобы убедиться, что вы не получите нулевое значение или любую другую ошибку, покадоступ к значению свойства.

Надеюсь, это поможет.

0 голосов
/ 17 июня 2011

Какой тип fieldValue? Как выглядит awx_property? Это будет работать только в том случае, если awx_property является коллекцией ключ / значение. Если нет, то вместо этого вы можете использовать отражение.

Если это набор ключей / значений, вы, вероятно, пропустили приведение. (row [FieldName] .ToString () или что-то еще). Также вам не хватает точки с запятой в блоке foreach.

...