Лучший тип для хранения результата LINQ в глобальной переменной - PullRequest
2 голосов
/ 08 июля 2011

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

summaryData = from summary in _entity.Summary
              // some constraints here
              select new
              {
                  summary.payment_category_desc,
                  summary.payment_due_amt,
                  summary.currency_desc
              };            

Мне нужно использовать эти результаты позже в другом событии (PrintDetail), внапример, я могу сказать:

string name = summaryData[currentIndex].payment_category_desc

По сути, мне нужно найти способ хранения результатов LINQ в глобальной переменной, которую я позже смогу перечислить.Я попробовал IQueriable, и он не позволит мне.Я также пытаюсь избежать создания класса с тремя членами, чтобы иметь возможность использовать ToList ().

Есть мысли?

Ответы [ 3 ]

2 голосов
/ 08 июля 2011

Редактировать Если честно, я только заметил, что вы используете анонимные типы.Как вы уже знаете, нет никакого способа получить анон-тип вне вашего метода.Тем не менее, вы можете использовать C # 4.0 Tuple <>

Следующее будет работать, когда summaryData передается / определяется вне вашего текущего метода:

summaryData = from summary in _entity.Summary
          // some constraints here
          select new Tuple<string, DateTime, decimal>
          {
              summary.payment_category_desc,
              summary.payment_due_amt,
              summary.currency_desc
          };            

Что бы это ни было, если оноявляется результатом сбора / запроса, IEnumerable<T> будет работать

Обязательно подумайте, нужно ли вам преобразовывать в список (кэшировать результат), сначала набрав .ToList().Если вы этого не сделаете, исходный перечислитель будет выполняться несколько раз, что может быть проблемой (производительности).Учитывайте, когда перечислитель обращается к файлу, который больше не открыт, не доступен и т. Д.

1 голос
/ 08 июля 2011

Ваш результат IQueryable использует отложенное выполнение.Если вы кодируете это внутри блока «using», у вас не будет соединения, когда вы пытаетесь получить доступ к своим результатам (глобальная переменная или нет).

Попробуйте вернуть List из вашего запроса LINQ черезМетод расширения ToList ().

1 голос
/ 08 июля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...