我有一个可观察的集合,它将绑定到silverlight数据网格,我需要根据OC中的数据显示一个特定的行
ID Name Status Desc Role
--------------------------------
1 ABC 500 des 50
1 ABC 500 des 55
2 XYZ 502 des 57
在上表中有重复的值,我需要以这样的方式过滤它们:当(status = 500)我需要选择角色为50的行或者如果(status = 501)我需要选择角色为55的行。在任何时刻,状态对于特定ID都保持相同。我的最终数据应如下所示。
ID Name Status Desc Role
---------------------------------
1 ABC 500 des 50
2 XYZ 502 des 57
答案 0 :(得分:1)
无论如何,这不是一个有趣的查询。可能有更好的答案,但这应该让你开始。这里的诀窍是,您需要更改orderby
条款以满足您的需求。我无法从您的问题中判断出您是在尝试选择最小角色值,还是试图传达其他内容,但orderby
子句是您选择正确记录的自定义逻辑所在的位置。
var results =
from a in DataVals
group a by new {a.ID, a.Name, a.Status, a.Desc} into g
select new {
g.Key.ID,
g.Key.Name,
g.Key.Status,
g.Key.Desc,
Role = (
from b in DataVals
where b.ID == g.Key.ID
&& b.Name == g.Key.Name
&& b.Status == g.Key.Status
&& b.Desc == g.Key.Desc
orderby b.Role
select b.Role
).Take(1).FirstOrDefault()
};