C# 使用Linq或Lambda比较嵌套集合中的项
我有一个物体看起来像这样 对象C# 使用Linq或Lambda比较嵌套集合中的项,c#,linq,list,lambda,nested-lists,C#,Linq,List,Lambda,Nested Lists,我有一个物体看起来像这样 对象 名字 身份证 PropertyGroupList[] PropertyGroupListItem PropertyList[] 属性列表项 标签 类型 属性列表项 标签 类型 PropertyGroupListItem PropertyList[] 属性列表项 标签 类型 属性列表项 标签 类型 每个对象都有一个PropertyListItem,其中标记为“Revision”。我需要将“Revision”的值与列表中存储的所
- 名字
- 身份证
- PropertyGroupList[]
- PropertyGroupListItem
- PropertyList[]
- 属性列表项
- 标签
- 类型
- 属性列表项
- 标签
- 类型
- 属性列表项
- PropertyList[]
- PropertyGroupListItem
- PropertyList[]
- 属性列表项
- 标签
- 类型
- 属性列表项
- 标签
- 类型
- 属性列表项
- PropertyList[]
- PropertyGroupListItem
方法,但我认为使用Linq或Lambda表达式获取对象会是一种更好的方法
我一直在试图找到一种自己做这件事的方法,但我觉得我所做的一切都是完全错误的。如果有人能帮我,给我一点解释,我会非常高兴的。非常感谢
编辑:
示例代码:
public MdsObject GetSoftwareObjectByName(string sPackageName)
{
GetObjectListRequest getObjectListReq = new GetObjectListRequest();
InitializeRequest(getObjectListReq);
//TODO: Are there more characters which need to be escaped in an LDAP query to DSM?
sPackageName = sPackageName.Replace("(", "\\(");
sPackageName = sPackageName.Replace(")", "\\)");
getObjectListReq.LdapQuery = "<LDAP://rootDSE>;(Name:IgnoreCase=" + sPackageName + ");;subtree";
getObjectListReq.MaxResults = -1;
GetObjectListReply getObjectListReply = AdministrationService.GetObjectList(getObjectListReq);
switch (getObjectListReply.ObjectList.Length)
{
case 0:
{ throw new ApplicationException("GetSoftwareObjectByName failed. Could not find '" + sPackageName + "'"); }
case 1:
{
MdsObject incompleteObjectFromLdap = getObjectListReply.ObjectList[0];
return GetSoftwareObjectById(incompleteObjectFromLdap.ID);
}
//more than one object was returned -> check revisions
default:
{
List<MdsObject> ListReturnedObjects = new List<MdsObject>();
for (int i = 1; i <= getObjectListReply.ObjectList.Length; i++)
{
MdsObject incompleteObjectFromLdap = getObjectListReply.ObjectList[i-1];
ListReturnedObjects.Add(GetSoftwareObjectById(incompleteObjectFromLdap.ID));
}
**Here I need to filter the objects**
throw new ApplicationException("GetSoftwareObjectByName failed. Software name '" + sPackageName + "' is not unique!");
}
}
}
公共MdsObject GetSoftwareObjectByName(字符串sPackageName)
{
GetObjectListRequest getObjectListReq=新的GetObjectListRequest();
初始化请求(getObjectListReq);
//TODO:在到DSM的LDAP查询中是否有更多需要转义的字符?
sPackageName=sPackageName.Replace(“(”,“\\(”);
sPackageName=sPackageName.Replace(“)”,“\\)”;
getObjectListReq.LdapQuery=“;(名称:IgnoreCase=“+sPackageName+”);子树”;
getObjectListReq.MaxResults=-1;
GetObjectListReply GetObjectListReply=AdministrationService.GetObjectList(getObjectListReq);
开关(getObjectListReply.ObjectList.Length)
{
案例0:
{抛出新的ApplicationException(“GetSoftwareObjectByName失败。找不到“+sPackageName+””);}
案例1:
{
MdsObject uncompleteObjectFromLDAP=getObjectListReply.ObjectList[0];
返回GetSoftwareObjectById(不完全ObjectFromLDAP.ID);
}
//返回了多个对象->检查修订
违约:
{
List ListReturnedObject=新列表();
对于(inti=1;i,首先将嵌套层次结构平铺为IEnumerable
var q = MyObject.PropertyGroupList
.SelectMany(item=>item.PropertyList); // For every Item in the GroupList, Flatten it and return the individual PropertyListItem
然后找到修订最高的版本
var q2 = q.OrderbyDescending(item=>item.Tag) // Order them by tag starting with the largest
.First(); // And get the first and thus biggest one.
帮助您处理示例代码、示例输入和示例输出会容易得多…从visual studio复制对象并保持所有内容可读性的最佳方法是什么?