LINQ在两个或多个条件下连接

本文关键字:条件下 连接 两个 LINQ | 更新日期: 2023-09-27 18:08:33

我正在尝试创建一个linq join语句,该语句基于两个条件从表中连接对象

MESSAGES
======
ID (int)
UserID (Guid)
MESSAGEPART
======
MessageID (int) 
IsPlaintext (bool)
MessageContent (nvarchar(max))

这是我想写的查询,基本上:

var messages = from m in db.Message 
               join p in db.MessagePart on m.ID equals p.MessageID 
                                        and p.IsPlaintext equals false

不幸的是,这不起作用。这是我能做的最好的了。

var messages = from m in db.Message 
               join p in
               (from x in db.MessagePart where x.IsPlaintext == false select x) 
               on m.ID equals p.MessageID

这似乎有点啰嗦。有没有更优雅的方式来实现它?

LINQ在两个或多个条件下连接

一个优雅的解决方案。

  var messages = from m in db.Message 
                   join p in db.MessagePart on m.ID equals p.MessageID 
                   where p.IsPlaintext == false

你可以试试这个:

var messages = from m in db.Message 
               join p in db.MessagePart 
               on new { m.ID, false } equals { p.MessageID, p.IsPlaintext }

或者你可以试试这个:

var messages = db.Message.Join(db.MessagePart.Where(x=>x.IsPlainText==false),
                               x=>x.ID,
                               y=>y.Id,
                               (x,y)=>new {});

new { }中,您将声明您选择的匿名类型的属性。

p。如果你更新你的帖子并显示你想要选择的字段,我也可以更新我的。