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
)