我有一个SQL表:

ID 发件人 USERD_ID 正文 标题 THREAD_ID 回复
1 2 15 某物 一些标题
2 2 16
3 2 17 一些标题
4 1 15 sth1 问题 501 1
5 3 15 sth2 回答:问题 501
6 2 15

我想返回一个数据如下的列表:

[{id: 1, user_id: 15, body: "sth", title: "some title", threadMessage: null},
{id: 4, user_id: 15, body: "sth1", title: "question", 
threadMessage: {messageId: 5,threadId: 501, body: "sth2", title: "answer: question"}},
{id: 6, user_id: 15, body: null, title: "null", threadMessage: null}]

我有一个这样的Quey:

var query = (from m in db.Message
                where m.USERD_ID = 15
                select new MessageTemp
                {
                 Id = m.Id,
                 Body = m.Body,
                 Title = m.Title
                })AsQueryable();

我不知道如何重写这个查询中的条件,如何才能为相同的Thread_ID获取有关MessageThread的信息.当然,我需要3项,而不是4项.

推荐答案

您只能使用子查询

var query = (
    from m in db.Message
    where m.USERD_ID == 15
       && (m.THREAD_ID == null || m.Replied == 1)
    select new MessageTemp
    {
        Id = m.Id,
        UserId = m.USERD_ID,
        ThreadId = m.THREAD_ID,
        Body = m.Body,
        Title = m.Title,
        ThreadMessage =
          m.Replied == 1
          ? (
            from m2 in db.Message
            where m2.THREAD_ID == m.THREAD_ID
               && m2.Id != m.Id
            select new MessageTemp
            {
                Id = m.Id,
                UserId = m.USERD_ID,
                ThreadId = m.THREAD_ID,
                Body = m.Body,
                Title = m.Title,
            }
          ).FirstOrDefault()
          : null,
    }).AsQueryable();

Csharp相关问答推荐

我应该将新的httpReportMessage()包装在using声明中吗?

在实际上是List T的 IESEARCH上多次调用First()是否不好?

EF Core在请求列表时忽略列,但在按ID获取时包含

如何循环遍历XML文档 node 以使用XSLT存储值

FileStream. FlushAsync()是否确保文件被写入磁盘?

安装附加的. exe与Visual Studio

实现List T,为什么LINQ之后它不会返回MyList?<>(无法强制转换WhereListIterator `1类型的对象)'

ASP.NET Core 8.0 JWT验证问题:尽管令牌有效,但SecurityTokenNoExpirationError异常

此反射有什么问题.是否发送值转换委托?

为什么将鼠标悬停在DateTimeOffset上只显示Hour值?

单行上的ReSharper数据标注

CRL已过期,但ChainStatus告诉我RevocationStatus未知

C#LINQ延迟执行和嵌套方法

如何在ASP.NET Core 8中获取键控服务词典

RavenDb:为什么在字符串==空的情况下过滤会过滤得太多?

如何阻止可传递依赖项出现在项目中

嵌套Blazor组件内的验证

与Visual Studio 2022中的.NET框架相比,如何在.NET Core 6中获取错误输出的窗口句柄

初始化具有EntityFrameworkCore和不同架构的数据库时引发System.MissingMethodExcept

使用c#中的Windows 10关机消息