我只是学习使用lambda表达式,并在几天前转向Dapper。我正在开发一个应用程序,该应用程序使用用户名填充listView
以进行某些帐户维护。我在排序的一部分时遇到了麻烦:
Global.allUsers
。 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
并没有削减它。
答案 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()
将枚举结果。