我刚刚开始学习使用 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
没有削减它。
最佳答案
这就是你需要的:
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()
将枚举结果。
关于c# - 从列表中 ID 所在的集合中选择全部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18232698/