从列表中的ID Where Collection中选择All

时间:2013-08-14 13:11:32

标签: c# list select dapper

我只是学习使用lambda表达式,并在几天前转向Dapper。我正在开发一个应用程序,该应用程序使用用户名填充listView以进行某些帐户维护。我在排序的一部分时遇到了麻烦:

  • 我使用Dapper查询获取对象集合,并将其分配给变量Global.allUsers
  • 我有一个已经使用过的ID列表(List<int> migrated),因此不需要出现在listView
  • 我使用以下内容获取了所有用户的列表:

    var  uniqUsers = Global.allUsers.OrderBy(n => n.lastNames).GroupBy(q => q.salesIDs);
    

要仅使用尚未迁移的用户填充listView,我需要仅选择q.salesIDs中没有migrated的用户。我不知道如果/如何在不使用某种foreach的情况下做到这一点。似乎应该有一种方法来选择它。

当然,我正在循环遍历uniqUsers,并使用每个对象属性中的值填充listView。我可以添加一个语句来检查当前ID是否在migrated中,但我的直觉只是告诉我我可以使用select语句执行此操作并为自己保留一步。

我在想这样的事情:

 var  uniqUsers = Global.allUsers.Where(i => i.salesIDs not in migrated).OrderBy(n => n.lastNames).GroupBy(q => q.salesIDs);

i => i.salesIDs not in migrated并没有削减它。

1 个答案:

答案 0 :(得分:3)

这可以满足您的需求:

var uniqUsers = allUsers.Where(x => migrated.Contains(x.salesIDs))
                        .OrderBy(y => y.lastNames)
                        .GroupBy(z => z.salesIDs).SelectMany(v => v).ToList();

获取salesID所在的所有用户migrated,然后按lastNames排序,然后按salesID分组。 SelectMany()会将元素投影到序列中,ToList()将枚举结果。