如何将此 SQL 转换为 LINQ

How can I convert this SQL to LINQ

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

下面是我在改编方面需要帮助的 SQL 声明和我目前使用的 table。这个SQLQuery的objective是在tableTableViewedMessageLog上记录了哪个用户看到了哪条消息,想要的效果是select所有消息都未读(此 table -- 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')

试试这个:

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

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

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

试试这个查询:

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;