4

我刚刚学习使用 lambda 表达式,几天前开始使用 Dapper。我正在开发一个应用程序,该应用程序填充了listView要选择用于某些帐户维护的用户名。我在排序的一个部分遇到问题:

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

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

要仅使用尚未迁移的用户填充listView,我只需要选择那些没有q.salesIDsin的用户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没有削减它。

4

1 回答 1

4

这可以满足您的需要:

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

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

于 2013-08-14T13:29:52.387 回答