如何将此 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;
我已经创建了一个代码优先的数据库,问题是我在将这个 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;