使用 LINQ 查找三个或更多匹配记录
首先,我将描述我的表结构。
我有一个表,有 2 列(ID 和 Root)。该表被转换为节点列表,其中简单的节点结构是:
struct Node
{
public int id;
public int root;
}
我需要找到该列表中具有 3 个或更多根等于的所有条目。
示例:
struct TeleDBData
{
public int ID;
public int? RootID;
}
private void InitList()
{
var eqList = new List<TeleDBData>();
TeleDBData root = new TeleDBData();
root.ID = 1;
TeleDBData node1 = new TeleDBData();
node1.ID = 2;
node1.RootID = 1;
TeleDBData node2 = new TeleDBData();
node2.ID = 3;
node2.RootID = 1;
TeleDBData node3 = new TeleDBData();
node3.ID = 4;
node3.RootID = 1;
TeleDBData node4 = new TeleDBData();
node4.ID = 5;
node4.RootID = 2;
eqList.Add(root);
eqList.Add(node1);
eqList.Add(node2);
eqList.Add(node3);
eqList.Add(node4);
}
运行查询后,将返回node1、node2和node3。
如何使用 LINQ 找到它们?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您只需相应地
GroupBy
即可:查看实际操作。
其他信息:
在上面的代码中,
g
是一个IGrouping
因此,根据文档页面定义,它是共享一个TeleDBData
项的集合公共密钥(这是一个int?
)。groups
是一个IEnumerable>
,所有这些都是Enumerable.GroupBy
方法的标准过程。您希望使用
IGrouping<,>
做的两件事是访问其Key
属性来查找键并枚举它以处理分组元素。我们在上面的代码中完成了这两件事。至于
GroupBy
lambda 中的n
,它只是依次表示eqList
中的每一项;由此可见它的类型是TeleDBData。我选择n
作为参数名称,作为“node”的缩写。You just need to
GroupBy
accordingly:See it in action.
Additional info:
In the code above,
g
is anIGrouping<int?, TeleDBData>
so, by the documentation page definition, it's a collection ofTeleDBData
items that share a common key (which is anint?
).groups
is anIEnumerable<IGrouping<int?, TeleDBData>>
, all of this is standard procedure for theEnumerable.GroupBy
method.The two things you would want to do with an
IGrouping<,>
is access itsKey
property to find the key and enumerate over it to process the grouped elements. We 're doing both of this in the above code.As for the
n
in theGroupBy
lambda, it simply represents each one of the items ineqList
in turn; it follows that its type isTeleDBData
. I pickedn
as the parameter name as an abbreviation of "node".