如何将此SQL转换为LINQ

时间:2015-07-14 04:15:42

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

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

下面是我需要帮助进行调整的SQL语句以及我当前使用的表。此SQL查询的目标是在表上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')

3 个答案:

答案 0 :(得分:2)

尝试此查询:

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;

答案 1 :(得分: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 :(得分:1)

你可以这样做,以防止子查询,提供更好的性能,并使它更容易理解发生了什么:

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