使用自定义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视图。SQL Server可以很好地优化查询。