ОК, я в основном разработчик LAMP, поэтому я новичок в этой структуре. Тем не менее, я знаком с основами в LINQ и сгенерировал модель сущности из моей БД. Теперь вот мое требование:
У меня есть сетка данных в WinForm, которая будет обновляться из источника данных на удаленном сервере каждые несколько секунд, поскольку изменения в наборе данных производятся из других источников. Очевидно, я хотел бы создать лямбда-выражение, чтобы получить правильный анонимный тип, чтобы удовлетворить столбцы, которые должны быть показаны в моей таблице данных. Я сделал это, и вот результат (я использую пользовательский элемент управления сеткой данных, кстати):
И мой код пока:
Models.dataEntities objDB = new Models.dataEntities();
var vans = from v in objDB.vans
select v;
gcVans.DataSource = vans;
ОК, теперь у меня есть базовый набор данных. Одна из проблем, с которыми я столкнулся, заключается в том, что в столбце «Состояние» будет показана рассчитанная строка, основанная на нескольких параметрах в наборе данных. Я добавил это к своим сущностям через частичный класс. Как вы можете видеть на скриншоте, это работает правильно:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WindowsFormsApplication1.Models {
public partial class van {
public string van_status {
get {
if (this.is_offline == 1) {
return "Offline";
} else if (this.is_prayer_room == 1) {
return "In Prayer Room";
} else {
return "TODO: Create statuses";
}
}
}
}
}
Это добавленное свойство отлично работает. Однако, во второй раз, когда я пытаюсь проецировать статус в анонимном типе, чтобы я мог также получить название школы, я получаю сообщение об ошибке:
Models.dataEntities objDB = new Models.dataEntities();
var vans = from v in objDB.vans
select new {
van_name = v.van_name,
school_name = v.school.school_name,
capacity = v.capacity,
phone = v.phone,
van_status = v.van_status
};
gcVans.DataSource = vans;
Итак, у меня два вопроса:
1) Если я не могу использовать вычисленные свойства моих частичных классов в проекциях LINQ, как я могу показать свою вычисленную строку в моей сетке данных?
2) Я даже правильно подхожу к этому? Когда я решу # 1, как мне обновить эти данные (то есть во время события срабатывания таймера)? Могу ли я просто позвонить objDB.refresh()
, а затем сказать, чтобы моя сетка данных обновлялась из источника данных? Запускает ли этот метод на самом деле лямбда-выражение, описанное выше, или он загружает все из БД?
Спасибо за любую помощь с этим. Кроме того, если у вас есть какие-либо лучшие практики, чтобы поделиться, это было бы здорово! Надеюсь, я объяснил это так подробно, как вам нужно, чтобы оказать помощь.