Свойства Linq to SQL с пользовательским SQL - PullRequest
0 голосов
/ 11 февраля 2012

У меня есть класс linq to sql с несколькими привязанными к таблице свойствами, но я хочу добавить другой, который вычисляется из более сложного запроса.

Есть ли способ добавить свойство, содержащее пользовательский код SQLсохраняя эффективность?

public class Region
{
   string Name {get ;set;}
   DateTime Founding {get; set;}
   int CivilWarCasualties
   {
     get
     {
        // Scalar SQL code that returns an int
     }
   }
}

Вот как я сейчас это делаю (пожалуйста, не обращайте внимания на схему, и я создал ее на лету).Не хватает отношений один-к-одному, чтобы сделать это без объединения, и это, очевидно, усложняет ситуацию.Я использую это большое соединение в нескольких местах и ​​хочу упростить его:

using (Context db = new Context())
{
  var q = (from r in db.GetTable<Region>()
          join b in db.GetTable<Battles>() join s.ID equals b.RegionID
          join s in db.GetTable<Soldier>() join s.LastBattleID equals b.ID
          join p in db.GetTable<Person>() join p.ID equals s.PersonID
          where !p.IsAlive
          select new {r, p})
       .GroupBy(x => x.Name)
       .Select(x=> new {x.Key.r.Name, x.Where(y => y.Key = x.Key).Count());
}

Вот как я хочу это сделать:

using (Context db = new Context())
{
  var q = (from r in db.GetTable<Region>()
           select new {r.Name, r.CivilWarCasualties})
}

Я в основном хочу написать вручнуюSQL-код для этого большого сложного объединения, описанного выше (что я, вероятно, не понял правильно, потому что я это создаю, как я в качестве примера).

Я пытаюсь избежать ошибки «без перевода в SQL», которая возникает, если я пытаюсь создать свойство в C #.Я также открыт для других идей.

1 Ответ

1 голос
/ 11 февраля 2012

Я бы, вероятно, создал бы представление SQL, которое содержало вычисляемый столбец.Затем SQL Server может хорошо оптимизировать запрос.

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