IQueryable Select возвращает 0 записей - PullRequest
1 голос
/ 15 марта 2011

Здравствуйте, я не знаком с silverlight и C # и имею программу, которая использует RIA-технику использования данных. У меня проблемы с выбором одного столбца из моего источника данных. Я пытаюсь использовать значение этого столбца для заполнения одной серии на моем графике.

В моем интерфейсе у меня есть таблица и гистограмма. Я могу заполнить свою таблицу используя:

DomainContext ctx = new DomainContext();
ListingGrid.ItemsSource = ctx.v_IQ_Flashes;
ctx.Load(ctx.Get_Table1());

Заполняет мою сетку данных всеми (*) полями из моей таблицы. Table1

Теперь я хочу заполнить одну серию на моем графике всего одним столбцом из этого графика. Используя следующий код, вы получите возвращаемое значение 0 (что неверно). Что я делаю не так?

var slot = ctx.v_IQ_Flashes.Where(e => e.Year == t_year).Select(e => e.Win );
var sum_ret_slot = slot.Sum();
decimal sum_slot = sum_ret_slot.Value;

Обратите внимание, что все значения (Slot, sum_ret_slot, sum_slot) - все 0. Я использовал отладчик, чтобы убедиться, что они действительно вызываются и все их значения равны 0.

Ответы [ 3 ]

1 голос
/ 15 марта 2011

Мне кажется, что вы на самом деле ничего не получаете из своего Where предложения.

Вызывает ли это удаление условия where, так что я бы оценил это и определил, почему это нене соответствует ни одной записи.

0 голосов
/ 15 марта 2011

Куда вы добавляете код получения sum_slot?Если вы делаете это последовательно с загрузкой, нулевые результаты являются правильными, потому что ctx.Load (ctx.Get_Table1 ()) является асинхронной операцией, и если следующий ваш шаг - фильтр, данные еще не загружены.

Я думаю, первый способ сделать этот код правильным - добавить фильтр к обратному вызову

ctx.Load (ctx.Get_Table1 (), () => {// get sum_slot}, null);

Второй способ - применить фильтр к запросу:

ctx.Load (ctx.Get_Table1 (). Где (e => e.Year == t_year)) - контекст будет загружать отфильтрованные элементы.

0 голосов
/ 15 марта 2011

Я согласен с msarchet - проверьте значение вашей переменной t_year - есть ли строки, которые действительно соответствуют вашему предикату Where?

Получаете ли вы результаты, если измените код на:

var slot = ctx.v_IQ_Flashes.Select(e => e.Win );
var sum_ret_slot = slot.Sum();
decimal sum_slot = sum_ret_slot.Value;

Или вы получите результаты, если измените код на:

var slot = ctx.v_IQ_Flashes.Where(e => e.Year == 2010).Select(e => e.Win );
var sum_ret_slot = slot.Sum();
decimal sum_slot = sum_ret_slot.Value;
...