c# - 将带有 LEFT JOIN 的 SQL 转换为 Linq(方法语法)
问题描述
这是我在这里的第一篇文章,所以如果我有任何问题,请告诉我,我会修复它。
我正在努力将带有左连接的简单 SQL 语句转换为 LINQ 语句(方法语法)。我不能使用 Linquer,因为这是一个 .Net Core 5.0 MVC 项目。
考虑到我有两张桌子:
dbo.OrganisationChannel (Id, OrganisationId, ChannelId)
dbo.Channel (Id, ChannelName, ChannelUrl)
我想显示组织当前没有的所有频道。
这是正确的SQL 查询
SELECT c.Id, c.ChannelName, c.ChannelUrl
FROM dbo.Channel c
LEFT JOIN dbo.OrganisationChannel oc ON c.Id = oc.ChannelId
WHERE oc.ChannelId IS NULL OR oc.OrganisationId <> 1
但是,相应的.GroupJoin
and.SelectMany
让我感到困惑。我找不到添加 WHERE 子句的正确位置:
var groupItems = db.Channel
.GroupJoin(
db.OrganisationChannel,
c => c.Id,
oc => oc.ChannelId,
(c, oc) => new { c, oc })
.SelectMany(
x => x.oc.DefaultIfEmpty(),
(chan, orgChan) => new
{
Id = chan.c.Id,
ChannelName = chan.c.ChannelName,
ChannelUrl = chan.c.ChannelUrl,
IsActive = chan.c.IsActive,
}
);
我会很感激这里的任何帮助,谢谢!
硅
解决方案
检查此网址https://dotnettutorials.net/lesson/left-outer-join-in-linq/
也是我的工作代码示例:
UserApiKeys
.Where(w => w.AppID == AppID && w.IsActive)
.Join(
UserApiApplications,
keys => keys.AppID,
apps => apps.AppID,
(keys, apps) => new { UserApiKeys = keys, UserApiApplications = apps}
)
.OrderByDescending(d => (d.UserApiKeys.ExpirationDate ?? DateTime.MaxValue))
.Select(s => new {
ApiKey = s.UserApiKeys.ApiKey,
IsActive = s.UserApiKeys.IsActive,
SystemName = s.UserApiKeys.SystemName,
ExpirationDate = (s.UserApiKeys.ExpirationDate == null)
? "Newer Expires"
: s.UserApiKeys.ExpirationDate.ToString(),
s.UserApiApplications
})
.ToList()
另外,参考@nalka post关于扩展方法的使用:
NotificationEvents
.Where(w => w.ID == 123)
.LeftJoin(
Events,
events => events.EventID, ev => ev.EventID,
(events, ev) => new { NotificationEvents = events, Events = ev }
);
推荐阅读
- javascript - Thymeleaf javascript根据表格中的文本替换图像源
- java - 线程“主”java.lang.UnsatisfiedLinkError 中的异常:com.printer.PrinterWinAPI.GetStatus(Ljava/lang/String;)J
- sql - 在sql server中将bool更新为不可为空
- javascript - Webpack 如何使用 $translatePartialLoader 缓存半身角翻译?
- java - 在 C++ 类方法循环中创建 JVM - 调用 API
- r - 能够将 1 行现有列与 R 中的另一行现有列合并以创建第 3 列
- javascript - 如何让硒等到页面完全呈现?
- java - 是否可以在 Selenium 网格中注册自定义 webdriver?
- css - 如何在 CSS 中制作蛋形?
- mysql - 在多级时间序列数据中插入缺失的日期记录