Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
合并两个对象并删除IEnumerable中myObject的双重属性<;myObject>;使用Linq(C#)_C#_Linq_Ienumerable - Fatal编程技术网

合并两个对象并删除IEnumerable中myObject的双重属性<;myObject>;使用Linq(C#)

合并两个对象并删除IEnumerable中myObject的双重属性<;myObject>;使用Linq(C#),c#,linq,ienumerable,C#,Linq,Ienumerable,我正在使用myObjects的IEnumerable。这些myObjects由App.config和其他XML文件设置 我在对象模型中为每个文件加载配置,然后在myObjects中添加内容。所以我只想将对象模型合并到一个模型中 myObjects包含myObjectChild的IEnumerable和myObjectChild包含myObjectChild的IEnumerable 我对所有这些IEnumerable有点迷茫,不知道如何合并这些 以下是课程: public class MyObje

我正在使用
myObjects
IEnumerable
。这些
myObjects
App.config
和其他XML文件设置

我在对象模型中为每个文件加载配置,然后在
myObjects
中添加内容。所以我只想将对象模型合并到一个模型中

myObjects
包含
myObjectChild
IEnumerable
myObjectChild
包含
myObjectChild
IEnumerable

我对所有这些
IEnumerable
有点迷茫,不知道如何合并这些

以下是课程:

public class MyObject
{
    public string Name { get; set; }
    public IEnumerable<MyObjectChild> MyObjectChilds { get; set; }
}

public class MyObjectChild
{
    public string Name { get; set; }
    public IEnumerable<MyObjectChildChild> MyObjectChildChilds { get; set; }
}

public class MyObjectChildChild
{
    public string Name { get; set; }
    public string Value { get; set; }
}
公共类MyObject
{
公共字符串名称{get;set;}
公共IEnumerable MyObjectChilds{get;set;}
}
公共类MyObjectChild
{
公共字符串名称{get;set;}
公共IEnumerable myObjectChilds{get;set;}
}
公共类MyObjectChildChild
{
公共字符串名称{get;set;}
公共字符串值{get;set;}
}
///////////////////////////////////////////////////////////////////////////////

编辑////

class Program
{
    static void Main(IEnumerable<MyObject> myObjects)
    {
        List<MyObject> objectConfigList = new List<MyObject>();
        foreach (var myO in myObjects)
        {
            if (objectConfigList.Any(a => a.Name == myO.Name))
            {
                Console.WriteLine("myO already in the list: " + myO.Name);
                Console.WriteLine("Check current myO.myOC");
                List<MyObjectChild> myOChild = myO.MyObjectChilds.ToList();
                foreach (var myOC in myOChild)
                {
                    if (objectConfigList.Where(a => a.Name == myO.Name).First().MyObjectChilds.Any(s => s.Name == myOC.Name))
                    {
                        Console.WriteLine("myOC already in the myO: " + myOC.Name);
                        List<MyObjectChildChild> tempmyOCC = myOC.MyObjectChildChilds.ToList();
                        Console.WriteLine("Check current myOC.myOCC");
                        foreach (var myOCC in tempmyOCC)
                        {
                            if (objectConfigList.Where(a => a.Name == myO.Name).First().MyObjectChilds.Where(myOCt => myOCt.Name == myOC.Name).First().MyObjectChildChilds.Any(p => p.Name == myOCC.Name))
                            {
                                Console.WriteLine("myOCC already defined in this myOCction: " + myOCC.Name);
                            }
                            else
                            {
                                objectConfigList.Where(a => a.Name == myO.Name).First().MyObjectChilds.Where(myOCc => myOCc.Name == myOC.Name).First().MyObjectChildChilds.ToList().Add(myOCC);
                            }
                        }
                    }
                    else
                    {
                        objectConfigList.Where(a => a.Name == myO.Name).First().MyObjectChilds.ToList().Add(myOC);
                    }
                }
            }
            else
            {
                objectConfigList.Add(myO);
            }
        }
    }
}
类程序
{
静态空隙总管(IEnumerable MyObject)
{
List objectConfigList=新列表();
foreach(myObjects中的var myO)
{
if(objectConfigList.Any(a=>a.Name==myO.Name))
{
Console.WriteLine(“myO已经在列表中:“+myO.Name”);
控制台写入线(“检查当前的myO.myOC”);
List myOChild=myO.MyObjectChilds.ToList();
foreach(心肌细胞中的var-myOC)
{
if(objectConfigList.Where(a=>a.Name==myO.Name).First().MyObjectChilds.Any(s=>s.Name==myO.Name))
{
Console.WriteLine(“myO中已经有myco:+myco.Name”);
List tempmocc=myOC.myobjectchilds.ToList();
控制台写入线(“检查当前的myOC.myOC”);
foreach(tempmocc中的var myOCC)
{
if(objectConfigList.Where(a=>a.Name==myO.Name).First().MyObjectChilds.Where(myOCt=>myOCt.Name==myOC.Name).First().MyObjectChilds.Any(p=>p.Name==myOCC.Name))
{
Console.WriteLine(“此myocAction中已定义myOCC:+myOCC.Name”);
}
其他的
{
objectConfigList.Where(a=>a.Name==myO.Name).First().MyObjectChilds.Where(myOC=>myOC.Name==myOC.Name).First().MyObjectChilds.ToList().Add(myOC);
}
}
}
其他的
{
其中(a=>a.Name==myO.Name).First().MyObjectChilds.ToList().Add(myOC);
}
}
}
其他的
{
objectConfigList.Add(myO);
}
}
}
}
我已经找到了一个解决方案,因为我没有成功地完成提议

我在这里发布我的解决方案,如果您有任何改进建议,我很乐意阅读


谢谢您的帮助。

要合并来自不同ienumerables的许多相同类型的ienumerables,您必须
。选择many()
要合并两个列表,您可以使用该方法,但这不能确保检查重复项

您可以使用删除重复项,但MyObject必须实现IEquatable接口

public class MyObject : IEquatable<MyObject>
{
    public string Name { get; set; }
    public IEnumerable<MyObjectChild> MyObjectChilds { get; set; }
    public bool Equals<MyObject>(MyObject other) { return this.Name.Equals(other.Name);    }
}
公共类MyObject:IEquatable
{
公共字符串名称{get;set;}
公共IEnumerable MyObjectChilds{get;set;}
public bool Equals(MyObject other){返回this.Name.Equals(other.Name);}
}

您能展示一些代码吗?使用Distinct()。从问题的描述中,我们只能猜测您的问题是什么。请继续阅读并发帖寻求帮助。对不起,这是我的第一篇帖子,我有点迷路了。我已经添加了类,我使用IEnumerable并希望合并所有MyObject而不丢失任何MyObject ChildChild您正在尝试加入这两个集合吗?如果一个项目可以出现在两个列表中,但不应该出现在结果输出中,则必须使用IEquatable,然后才能将它们合并在一起。感谢您的回答,我将尝试这样做:)。