【发布时间】:2021-06-22 18:14:31
【问题描述】:
我遇到了一个 linq 查询,需要一点帮助。
我有以下表格
表:客户端
ClientId Name Age
(integer)
-------- ---------- -----
12635 John 23
87263 Derek 43
65237 Sarah 36
84735 Alice 28
表格:操作
Id Action ObjecId
(varchar)
-------- --------- ---------
202 Firefox 87263
203 Chrome 65237
204 Android 87263
205 Explorer 84735
206 Firefox 12635
我的目标是使用ClientId 和ObjectId 字段连接两个表。对于每个用户的操作表,我只需要获取一条记录。如果用户有两条记录,我只需要获取 value='Android' 的一条
所以上面数据的结果应该是:
Derek Android
Sarah Chrome
Alicie Explorer
John Firefox
我正在使用以下方法。
var query = Set as IQueryable<Client>;
var actionQuery = Set as IQueryable<Action>
query= query.Join(actionQuery,
Client=> Client.ClientId.ToString(),
Action => Action.ObjectId.ToString(),
(Client, Action) => Client);
上面我有 Derek 的重复记录,我只需要为他获取一个记录,但我不知道该怎么做。如果用户有 2 条记录,我只需要获取 value='Android' 的一条。
拜托,你能帮帮我吗? 谢谢
【问题讨论】:
-
愚蠢的问题 - 如果一个特定的客户端有两条记录,但它们都不是“Android”怎么办?说真的 - 为什么不按 ClientId 对结果进行分组,并在每个组中选择具有最高 Action Id 的记录?我相信这就是您要找的。span>
-
如果一个特定客户端有两条记录但没有一条是“Android”,该怎么办? -> 这种情况是不可能的。如果客户有两条记录,其中一条总是 Android。您的查询无效,因为我无法按 actionId 排序,如果 Android 操作记录的 id 较低,则此查询不会得到我想要的结果
标签: linq