userkey     keyboardkey     keypressed
----------------------------------------
u1          kb1             A
u1          kb1             B
u1          kb2             C
u2          kb1             A
u2          kb1             B
u3          kb1             A
u3          kb1             B
u3          kb1             D
u4          kb1             E


我如何才能写一个linq到sql查询以仅获得公用按键。

例如,找到在用户帐户(u1,u2,u3)中所用的公用按键,并且keyboardkey = kb1。这将使输出为包含A,B的列表。

并找到用户帐户所在的公用按键(u1,u2,u3,u4)和keyboardkey = kb1,那么它应该不返回任何内容。

谢谢。

最佳答案

这样的事情应该起作用:

var commonKeysPressed = db.keys
                          .Where(k => userKeyList.Contains(k.userkey)
                                 && k.keyboardkey == someKeyboardkey)
                          .GroupBy(k => k.keypressed)
                          .Where( g => g.Select( x=> x.userkey).Distinct().Count() == userCount)
                          .Select(g => g.Key)
                          .ToList();


这要求:


keys成为有问题的SQL表
userKeyList是用户帐户的数组,即字符串数组-在您的示例中(u1, u2, u3)
在您的示例中,someKeyboardkey是一些键盘键值
kb1
userCount userKeyList数组中的用户数(userKeyList.Length

09-17 20:59