Linq-to-sql一对多,最多

时间:2009-02-04 16:00:00

标签: sql linq linq-to-sql .net-3.5 join

我对这个问题感到非常兴奋。可能是睡眠不足......或者我可能只是变得愚蠢。

我有两张桌子:
a)人{Key,Name,LastName}
b)LogEntry {Key,PersonKey,Log,EntryTime}

我正在尝试获取Person和LogEntry的连接,其中LogEntry是给定Person的最新LogEntry。

我希望在五分钟内我没有“呃...”,当答案给我带来困难时。

3 个答案:

答案 0 :(得分:2)

如果你在SQLServer中有关系,你应该在类Person中有类似的东西 Person.LogEntries。你可以这样做:

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

然后你可以检查logEntry是否为null如果不是我应该有该人的最后一个日志条目。

答案 1 :(得分:1)

如果没有设置关系,则可以通过以下方式完成接受的答案:

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

答案 2 :(得分:0)

在Person的部分类上,创建一个类似于此的新属性:

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()
             };