none
Не простой Linq to object RRS feed

  • Вопрос

  • Как выполнить запрос, если известно название поля, по которому требуется выбрать данные?

    Вот класс, по типу которого заполнен список List<myClass> Colleagues:

    public class myClass

        {

            public int Old { get; set; }

            public string Family { get; set; }

            public bool sport { get; set; }

            public duoble growth { get; set; }

        }

    Нужно подготовить выборку по полю «Old». Но это поле задано по имени, то есть

    String pole = “Old”;

    Подскажите, как сформировать запрос, если тип поля известен и его название. Что-то вроде этого:   

        var sss = (int)Collegues.Select(x=x.Find('Old')).ToList()%;

    то есть это надо вместо обычного var sss = Collegues.Select(x=x.Old).ToList()%;

    20 июля 2012 г. 12:02

Ответы

  • "А как его преобразовать к List<int>?" - примерно так

    var newList = list.Select(l =>

    Convert.ToInt32(l.GetType().GetProperty(pole).GetValue(l, null))).ToList();


    • Изменено YatajgaModerator 20 июля 2012 г. 12:56
    • Помечено в качестве ответа yura_ 20 июля 2012 г. 13:01
    20 июля 2012 г. 12:43
    Модератор

Все ответы

  • Использовать всемогущую рефлексию и деревья выражений. Но тут можно обойтись без последней.

    namespace ConsoleApplication
    {
      class Program
      {
        static void Main(string[] args)
        {
          String pole = "Old";
          List<myClass> list = new List<myClass>();
          list.Add(new myClass() { Old = 1 });
          list.Add(new myClass() { Old = 2 });
          list.Add(new myClass() { Old = 3 });
          var newList = list.Select(l => l.GetType().GetProperty(pole).GetValue(l, null)).ToList();
        }
      }
      public class myClass
      {
        public int Old { get; set; }
        public string Family { get; set; }
        public bool sport { get; set; }
        public double growth { get; set; }
      }
    }
    

    20 июля 2012 г. 12:22
    Модератор
  • Здорово! Но осталась одна проблема.

    var newList = list.Select(l => l.GetType().GetProperty(pole).GetValue(l, null)).ToList();

    newList имеет тип List<object>. А как его преобразовать к List<int>?

    20 июля 2012 г. 12:38
  • "А как его преобразовать к List<int>?" - примерно так

    var newList = list.Select(l =>

    Convert.ToInt32(l.GetType().GetProperty(pole).GetValue(l, null))).ToList();


    • Изменено YatajgaModerator 20 июля 2012 г. 12:56
    • Помечено в качестве ответа yura_ 20 июля 2012 г. 13:01
    20 июля 2012 г. 12:43
    Модератор
  • Ничего не видно. А можно убрать прокрутку? Или как-то пошите открыть?
    • Изменено yura_ 20 июля 2012 г. 12:48
    20 июля 2012 г. 12:47
  • Не видно что? Там всего одна строка кода и у меня нормально показывается.
    20 июля 2012 г. 12:50
    Модератор
  • У Вас наверное монитор FullHD! У меня так широко не открывается... Скролл все скрывает.

    Сделайте там, может, перенос, пожалуйста.

    20 июля 2012 г. 12:53
  • Так видно?
    20 июля 2012 г. 12:56
    Модератор
  • Да, спасибо.

    20 июля 2012 г. 13:01
  • У Вас наверное монитор FullHD! У меня так широко не открывается... Скролл все скрывает.

    Сделайте там, может, перенос, пожалуйста.


    Ошибка со скролом может быть в IE в режиме совместимости, известный, к сожалению, баг форумов.

    Для связи [mail]

    27 июля 2012 г. 13:16