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 中的用户定义函数?