2012-02-11 60 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可以很好地優化查詢。