LINQ 中的 C# 外部应用

Posted

技术标签:

【中文标题】LINQ 中的 C# 外部应用【英文标题】:C# Outer Apply in LINQ 【发布时间】:2011-03-02 03:47:34 【问题描述】:

如何在 LINQ 中实现 Outer Apply?我有点问题。

这是我正在使用的 SQL 查询。

SELECT u.masterID
      ,u.user
      ,h.created
FROM dbo.Users u
OUTER APPLY (SELECT TOP 1 * FROM UserHistory h where h.masterID = u.masterID ORDER BY created DESC) h

【问题讨论】:

【参考方案1】:

Outer Apply 产生左外连接的结果, 查询应该是:

var q =
from u in db.Users
join h in db.UserHistory on u.masterID equals h.masterID into ps
from p in ps.DefaultIfEmpty()
select new  
    masterID = u.masterID
    ,user = u.user
    ,created = ps.OrderByDescending(x=>x.created).FirstOrDefault()==null?null:ps.OrderByDescending(x=>x.created).First().created
;

【讨论】:

【参考方案2】:
from u in Users 
join UserHistory on u.masterID equals h.masterID into h 
select new 
  u.masterID,
  u.user,
  Created = h.Select(x => x.created).OrderByDescending(c => c).FirstOrDefault()

或者,通过关联:

from u in Users
let created = u.UserHistories.Select(x => x.created).OrderByDescending(c => c).FirstOrDefault()
select new

  u.masterID,
  u.user,
  Created = created

【讨论】:

【参考方案3】:
from u in Users
join UserHistory on u.masterID equals h.masterID into h
select new u.masterID, u.user, h.created.OrderByDescending().First()

【讨论】:

以上是关于LINQ 中的 C# 外部应用的主要内容,如果未能解决你的问题,请参考以下文章

错误 3002:映射片段中的问题 | c# linq 到实体

如何在我的可视 C# Web 服务中为我的 android 应用程序调用 LINQ 中的用户定义函数?

C# LINQ查询之对象

c# Linq及Lamda表达式应用经验之 GroupBy 分组

如何在 C# 中使用 LINQ 应用右外连接?

将 orderby 应用于 C# LINQ 内连接