LINQ to SQL:多列左连接

2023-11-27

首先,我搜索了 google/SO,检查了一些示例,但我没有设法编写正确的 linq 表达式:

这就是我的工作 sql 查询的样子:

select *
from Places p
left join VoteLog v
on p.Id = v.PlaceId
and v.UserId = '076a11b9-6b14-4230-99fe-28aab078cefb' --demo userid

这是我对 linq 的尝试:

public IQueryable<Place> GetAllPublic(string userId)
{
    var result = (from p in _db.Places
                 join v in _db.VoteLogs
                 on p.Id equals v.PlaceId // This works but doesn't fully reproduce my SQL query
                 // on new { p.Id, userId} equals new {v.PlaceId, v.UserId} -> Not ok
                 where p.Public == 1
                 select new
                 {
                    Id = p.Id,
                    UserId = p.UserId,
                    X = p.X,
                    Y = p.Y,
                    Titlu = p.Titlu,
                    Descriere = p.Descriere,
                    Public = p.Public,
                    Votes = p.Votes,
                    DateCreated = p.DateCreated,
                    DateOccured = p.DateOccured,
                    UserVoted = v.Vote
                 })
        .ToList()
        .Select(x => new Place()
        {
            Id = x.Id,
            UserId = x.UserId,
            X = x.X,
            Y = x.Y,
            Titlu = x.Titlu,
            Descriere = x.Descriere,
            Public = x.Public,
            Votes = x.Votes,
            DateCreated = x.DateCreated,
            DateOccured = x.DateOccured,
            UserVoted = x.UserVoted
        }).AsQueryable();

在你的查询中你没有做任何事情left join。 尝试这个:

from p in _db.places
join v in _db.VoteLogs

//This is how you join by multiple values
on new { Id = p.Id, UserID = userId } equals new { Id = v.PlaceId, UserID = v.UserID } 
into jointData

//This is how you actually turn the join into a left-join
from jointRecord in jointData.DefaultIfEmpty()

where p.Public == 1
select new
{
    Id = p.Id,
    UserId = p.UserId,
    X = p.X,
    Y = p.Y,
    Titlu = p.Titlu,
    Descriere = p.Descriere,
    Public = p.Public,
    Votes = p.Votes,
    DateCreated = p.DateCreated,
    DateOccured = p.DateOccured,
    UserVoted = jointRecord.Vote 
    /* The row above will fail with a null reference if there is no record due to the left join. Do one of these:
       UserVoted = jointRecord ?.Vote - will give the default behavior for the type of Uservoted
       UserVoted = jointRecord == null ? string.Empty : jointRecord.Vote */
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LINQ to SQL:多列左连接 的相关文章

随机推荐

  • 如何使用 Java 设置 DynamoDB 返回的匹配项的限制?

    在我的 Android 应用程序中 我想从 DynamoDB 查询数据 将会有一千个匹配的项目 但我只想获得其中的前 10 个 我不知道如何设置这个限制 我在文档中找到了这些行 DynamoDB 查询和扫描 API 允许使用限制值来限制结果
  • 忽略转义序列 C++

    我尝试搜索谷歌但找不到答案 谁能告诉我如何忽略存储在 string 中的转义字符 我正在使用一个包含不同字符的数组 如下所示 string str 来自编译器的错误消息 未知转义序列 位于 As Zac has already pointe
  • Inno 设置部分 [Run] 带条件

    我的病情需要帮助 Run 如果它是可能的 我需要运行取决于条件的命令 像这样 if UserPage Values 0 NC then FileName sys inetsrv appcmd exe Parameters set 或者其他方
  • 最大还是默认?

    从可能不返回行的 LINQ 查询获取最大值的最佳方法是什么 如果我只是这样做 Dim x From y In context MyTable Where y MyField value Select y MyCounter Max 当查询未
  • 使用 Python 将流写入 Google Cloud Storage

    我正在尝试迁移AWS Lambda函数写在Python到 CF 那个 即时解压缩并逐行读取 对每条线执行一些灯光变换 将未压缩的输出 一次一行或块 写入 GCS 输出 gt 2GB 但略小于 3GB 因此适合Lambda just 嗯 这似
  • Resttemplate表单/多部分:POST中的图像+ JSON

    我正在尝试调用一个rest ws 使用resttemplate 它接受图像和一些JSON 但是 我似乎无法让它运行 相关代码如下 HttpHeaders header new HttpHeaders header setContentTyp
  • Python 将轴上的日期转换为月份

    我有一个时间序列 我想逐年绘制 我希望数据是每日的 但轴将每月显示为 一月 二月 等 目前我可以获得每日数据 但轴是 1 366 一年中的某一天 或者我可以将每月轴设置为 1 2 3 等 通过将索引更改为 df index month 但数
  • 如何在 Next.js 静态站点生成中获取 URL 查询字符串?

    我想从 Next js 静态站点生成的 URL 获取查询字符串 我在 SSR 上找到了一个解决方案 但我需要一个用于 SSG 的解决方案 Thanks import useRouter from next router import use
  • C# 部署我的应用程序 - 仅从 Web 单击一次

    所以我用 C 开发了我的应用程序 我已准备好部署它 我想让用户始终从我的网站启动它 以便他们始终获得更新 无需安装等 ClickOnce 是执行此操作的正确方法吗 我尝试将 ClickOnce 部署到我的服务器上 但我发现了一些事情 1 用
  • 开源 Telnet Java API

    是否有适用于 Java 的开源 telnet API 库 例如 Python telnetlib 我需要使用 telnet 连接到服务器并从 Java 程序中执行一些命令 我更喜欢使用 Apache Commons Net 库 http c
  • 使用复选框绑定到具有强类型 MVC 视图的布尔列表列表字典

    我正在使用 MVC 4 Net 4 和 Visual Studio 2012 我正在尝试将一个相当复杂的模型与我的观点之一结合使用 但在使其正确绑定方面遇到了严重的困难 该模型用整数键和布尔列表列表值来包装字典 基本上 搜索是对由整数指示的
  • 位字节顺序如何影响 C 中的按位移位和文件 IO?

    Let L and B是两台机器 L订购它的bits从最低有效位 最低有效位 到 MSB 最高有效位 同时B命令 从 MSB 到 LSB 或者 换句话说 L使用 Little Endian 而B使用大尾数法bit 不要与字节排序相混淆 问题
  • 关闭实体框架 CTP5 中的对象缓存

    我无法弄清楚 CTP 5 中实体框架代码优先的内容 它正在缓存对象 但我不希望它这样做 例如 我加载一个加载对象的页面 使用 ASP NET MVC 站点 然后我去更改数据库 我重新加载页面 但更改没有反映出来 如果我终止该网站并重新运行它
  • iOS:键盘出现时禁用 UITableView 动画

    每个人都想在键盘弹出时移动 UITableView 但我正在寻找一种方法来禁用键盘弹出时光标的自动动画 当键盘弹出并导致 UITableView 滚动到光标 以避免阻塞它 时 我遇到了奇怪的抽动 颠簸 不稳定的滚动行为 我的每个 UITab
  • PHP 捕获 SimpleXMLElement 解析错误 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我有一个脚本可以解析一些 XML adf 内容 有时我
  • 如何在 Play 框架 2.0 (Java) 中重定向到外部 URL

    通过使用控制器中的redirect 方法似乎可以重定向到内部URL public static Result index return redirect routes Application tasks 但是我想重定向到控制器中的外部 UR
  • 在 Ubuntu OpenJDK 7 上启用密码

    我编写了以下 Java 程序来转储 JVM 中启用的密码 import java security KeyStore import javax net ssl KeyManagerFactory import javax net ssl S
  • const 引用必须在构造函数基类/成员初始值设定项列表中初始化

    我试图阻止对我正在编写的类的默认构造函数的访问 我希望其他人使用的构造函数需要对另一个对象的 const 引用 我已将默认构造函数设为私有 以防止其他人使用它 我收到默认构造函数的编译器错误 因为 const 引用成员变量未正确初始化 我该
  • 除 ffmpeg x264 之外的 H264 编码器

    我正在开发的 iPhone 应用程序会在特定的用户定义的时间间隔内连续捕获图像 我正在寻找一种将这些图像组合成 H264 编码视频的方法 我在 Google 上做了一些研究 看起来我必须在 iPhone 上使用 ffmpeg mencode
  • LINQ to SQL:多列左连接

    首先 我搜索了 google SO 检查了一些示例 但我没有设法编写正确的 linq 表达式 这就是我的工作 sql 查询的样子 select from Places p left join VoteLog v on p Id v Plac