Как правильно добавить вычисляемое во время выполнения непостоянное свойство только для чтения в класс данных LinqToSQL - PullRequest
2 голосов
/ 26 мая 2011

В таблице есть поле DateTime и сопоставленное свойство в классе данных LinqToSQL.Задача состоит в том, чтобы добавить логическое свойство среды выполнения IsWorkingTime (не сопоставленное ни с каким столбцом напрямую, а рассчитанное на чтение), которое будет сообщать, является ли DateTime рабочим часом (часть даты не является ни выходным, ни праздничным днем, а часть времени между 9 часами утра).и 5 вечера).Это свойство должно быть доступно для запросов LINQ, но не должно влиять на фон базы данных.

Как этого добиться?Я использую конструктор классов данных Visual Studio, чтобы сначала нарисовать модель, а затем сгенерировать базу данных.

1 Ответ

1 голос
/ 26 мая 2011

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

//TheModel.cs
// file generated by tool
public partial class TheModel
{
    // ...
}

А затем ваше расширение

//TheModelCustom.cs
public partial class TheModel
{
     public bool IsWorkingTime
     {
          get
          {
               // your (hopefully inexpensive) logic
          }
     }
}

Если у вас возникнут проблемы, это часть о желании использовать свойство в Linq.Если вы хотите использовать его для построения запроса к базе данных , вам может не повезти.Поставщик не сможет перевести свойство и его логику в соответствующий SQL.Однако, если вы можете обойтись с фильтрацией / проектированием после БД / и т. Д., Вы можете использовать это свойство после того, как данные будут возвращены.

 var results = (from model in db.TheModels 
               where /* some criteria */
               select model) // <-- the part of the query that goes to the DB
               .AsEnumerable()
               .Where(m => m.IsWorkingTime); // <-- happens in memory
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...