在LINQ中过滤数据

时间:2010-12-18 14:28:16

标签: sql-server silverlight linq

我有一个可观察的集合,它将绑定到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

1 个答案:

答案 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()
   };