2009-02-04 37 views
2

我對這一個有一段時間。可能是缺乏睡眠...或者我只是啞巴。Linq-to-sql一對多最大

我有2個表:
一)人{重點,名稱,姓氏}
B)LogEntry {重點,PersonKey,日誌,EntryTime}

我試圖讓加盟者和LogEntry LogEntry是給定Person的最新LogEntry。

我希望在五分鐘內我不會去「唔......」,當時答案讓我很難受。

回答

2

如果在SQLServer的關係,你應該在類Person像 Person.LogEntries。你可以這樣做:

LogEntry logEntry = 
Person.LogEntries.OrderByDescending(p => p.EntryTime).FirstOrDefault(); 

然後你就可以檢查是否logEntry爲null,如果不是我應該有一個人最後的日誌條目。

+0

我的大腦刺入嘗試使用最大謝謝! – Daniel 2009-02-04 16:36:05

0

在對人的部分類,創建一個類似的新屬性:

public partial Person 
{ 
    public LogEntry RecentLogEntry 
    { 
     get 
     { 
      return LogEntries.OrderByDescending(l => l.EntryTime).FirstOrDefault(); 
     } 
    } 
} 

我相信這(或類似的東西)應該工作,雖然這是從內存。當然,這依賴於你們之間的關係。

如果您希望您的選擇記錄時要做到這一點,你可以試試這個:

var people = from p in context.People 
      select new 
      { 
       Person = p, 
       LatestLogEntry = p.LogEntries.OrderByDescending(l => l.EntryTime).FirstOrDefault() 
      }; 
1

如果一個人沒有關係的建立,公認的答案,可以通過做:

var r = Person 
    .GroupJoin(
     LogEntry, 
     o => o.Key, 
     i => i.PersonKey, 
     (o,i) => new {o, Entry = i.OrderByDescending(x => x.EntryTime).First()});