C#中LINQ查询如何将两行合并为一行

laawzig2  于 2023-11-14  发布在  C#
关注(0)|答案(1)|浏览(245)

我有一个SQL表:
| ID|发送者|用户ID|身体|标题|螺纹_ID|回答说|
| --|--|--|--|--|--|--|
| 1 | 2 | 15 |某事|一些标题|NULL| NULL|
| 2 | 2 | 16 |NULL| NULL| NULL| NULL|
| 3 | 2 | 17 |NULL|一些标题|NULL| NULL|
| 4 | 1 | 15 |sth1|问题| 501 | 1 |
| 5 | 3 | 15 |sth2|回答:问题| 501 |NULL|
| 6 | 2 | 15 |NULL| NULL| NULL| NULL|
我想返回一个包含数据的列表,看起来像这样:

[{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个。

omjgkv6w

omjgkv6w1#

你可以只使用一个子查询

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();

字符串

相关问题