C#Linq从一个到多个选择,但如果在多个中是假的,则不要返回

时间:2012-07-17 23:45:44

标签: c# database linq

对不起要求我尝试搜索类似的查询但没有结果或者我不知道在寻找什么,所以这里是问题:

两个表User_Table主键在Message_Tabel中作为外键每个消息都有一个代码并且是一个isReplyed(true,false)

现在,我如何检索具有特定代码且没有回复的消息的用户

示例:

UserTabel                            
==========            
ID 1                 
ID 2                
ID 3                 
ID 4                 
ID 5                
ID 6                
ID 7                 
ID 7                 



                Message_Tabel             
           =============================================
            ID 1       Code 22X      Replied False   MID 1
            ID 1       Code 20X      Replied False   MID 2
            ID 1       Code 22X      Replied true    MID 3
            ID 1       Code 22X      Replied False   MID 4
            ID 2       Code 22X      Replied False   MID 5
            ID 3       Code 22X      Replied true    MID 6
            ID 2       Code 22X      Replied False   MID 7
            ID 2       Code 22X      Replied False   MID 8

查询所有用户要检索的代码为22X且没有回复的消息: 按用户ID分组的邮件 将检索具有Id 2而不是ID 1或3的User的所有消息,因为已经使用该代码回复了该消息。

我希望如此,如果任何用户可以使用特定代码发送尽可能多的消息,但我将使用该代码回复一次消息并忽略其余消息

我希望这一切都有意义

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

这样的事情可能会成功(未经测试):

        var users = context.Messages
            .Where(m => m.Code == "22X")
            .GroupBy(m => m.User)
            .Where(m => m.All(x => x.Replied == false))
            .Select(p => p.Key);

这应该返回符合您期望的用户。如果您愿意,您也可以更改查询以返回消息,以便您可以选择要回复的消息。