【问题标题】:How can I convert this SQL to LINQ如何将此 SQL 转换为 LINQ
【发布时间】:2015-10-02 13:17:42
【问题描述】:

我创建了一个代码优先的数据库,但问题是我在将此 SQL 语句转录为 C# 代码时遇到了一些困难。

下面是我在调整时需要帮助的 SQL 语句以及我目前使用的表。这个 SQL Query 的目的是在表 TableViewedMessageLog 上记录哪个用户看到了哪些消息,并且期望的效果是选择所有消息 Non-Read(哪些信息存储在该表上 - TableViewMessageLogs)给某个用户。

http://gyazo.com/0105c0959bdd2930272bf5c07a112a11

select * from TableMessages tm
where tm.Id not in (select tv.Message_Id from TableViewedMessageLogs as tv
where tv.User_Email = 'asd@asd')

【问题讨论】:

    标签: c# .net entity-framework linq linq-to-sql


    【解决方案1】:

    试试这个:

    var data = (from e in context.TableMessages
                where context.TableViewedMessageLogs
                         .Where(x => x.User_Email == 'asd@asd')
                         .Select(x => x.Message_Id).Contains(e.Id) == false
                select e)
               .ToList();
    

    【讨论】:

    • 这只是给定查询的翻译,我不知道你到底在做什么数据库。
    【解决方案2】:

    您可以这样做以防止子查询,提供更好的性能并更容易理解正在发生的事情:

    var viewedLogs = context.TableViewedMessageLogs.Where(w => w.User_Email = 'asd@asd');
    var result = context.TableMessages.Where(w => !viewedLogs.Contains(w.Id));
    

    【讨论】:

      【解决方案3】:

      试试这个查询:

      var data = from f in context.TableMessages
                 where f.id !=
                 (
                     from fb in TableViewedMessageLogs 
                     where User_Email == 'asd@asd'
                     select fb.Message_Id
                 )
                 select f;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-11
        • 1970-01-01
        • 2012-08-20
        • 2021-04-10
        • 2016-08-07
        • 2016-01-23
        • 2022-01-22
        相关资源
        最近更新 更多