2012-02-11 63 views
0

我有一个LINQ到有几个表绑定属性的sql类,但我想添加另一个从更复杂的查询计算出来的。Linq到自定义SQL的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”错误。我也接受其他想法。

回答

1

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