LINQ在两个或多个条件下加入

时间:2014-06-13 12:03:49

标签: c# sql linq

我正在尝试创建一个linq连接语句,它根据两个条件从表中连接一个对象

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

这似乎有点啰嗦。是否有一种更优雅的方式来实现它?

2 个答案:

答案 0 :(得分:4)

优雅的解决方案。

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

答案 1 :(得分:0)

你可以尝试这个:

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 { }内,您将声明您选择的匿名类型的属性。

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