使用自定义SQL的Linq to SQL属性

本文关键字:SQL to 属性 Linq 自定义 | 更新日期: 2023-09-27 18:24:20

我有一个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代码一次(我可能没有做对,因为我正在边做边做)。

如果我尝试在C#中执行属性,我会尽量避免出现"无法转换为SQL"的错误。我也对其他想法持开放态度。

使用自定义SQL的Linq to SQL属性

我可能会创建一个包含计算列的SQL视图。SQL Server可以很好地优化查询。