2009-11-17 208 views
2

我有一個用戶實體,它表示我的數據庫中的用戶表。此表有一個名爲ManagerID的字段,它引用另一個用戶記錄(基本上是員工到經理的映射)。每個用戶也可以參考另一個可以有多個條目的表格,爲了這個例子我們將其稱爲RecordsLINQ to SQL查詢

所以基本規則是每個用戶都可以有多個記錄,每個用戶都可以管理一個其他用戶組。

所以當什麼,我需要做一個小例子:

User manager = Repository.FindUser('12345'); 
List<Record> TeamRecordCollection = new List<Record>(); 

// add the managers records to the team collection 
var managerRecords = GetRecords(manager, DateTime.Today); 
TeamRecordCollection.AddRange(managerRecords); 

// add each individual team members records 
foreach (var user in manager.TeamMembers) 
{ 
    var records = GetRecords(user, DateTime.Today); 
    TeamRecordCollection.AddRange(records); 
} 

... 

private IEnumerable<Record> GetRecords(User user, DateTime date) 
{ 
    var records = from rec in user.Records 
        where rec.DateSubmitted == date 
        select rec; 
    return records.AsEnumerable(); 
} 

// the above code isn't tested it is just a sample idea 

所以我想知道的是:

一)這能在一個L2S語句來完成?
b)它會比現在的方式更有效嗎?

回答

3

如何像;

var records = from rec in _DB.Records 
       from user in _DB.Users.Where(x => x.ManagerId == managerId || 
               x.Id == managerId) 
       where rec.UserId == user.Id 
       select rec; 
+0

我認爲這看起來不錯喊,雖然Where語句將不得不改變,以user.ManagerID == ||經理ID user.ID == managerID),因爲經理可以有記錄。 – James 2009-11-17 15:52:32

+0

@詹姆斯:固定的,我認爲這應該工作。不知道性能影響是什麼,也許做一些基準測試? – Kirschstein 2009-11-17 16:17:17

+0

不得不稍微調整一下,但總的來說,這幫助我整理出來,謝謝。是的,我會做一些基準測試,以測試它是否是最有效的方法。 – James 2009-11-17 19:48:03

1

此外,

一旦你找到了這一個LINQ2SQL的解決方案,確保使用SQL事件探查器查看執行計劃,並根據需要調整。

HTH