0

我有以下实体

public class A
    {
        public string TestMethodName { get; set; }
        public string FailedFor { get; set; }
    }

    public class B
    {
        public string TestMethodName { get; set; }
        public string FailedFor { get; set; }
    }

我正在使用 Windows 窗体。如果我尝试按照以下方式执行联合

private void button2_Click(object sender, EventArgs e)
        {
            List<A> aCollection = new List<A>();
            List<B> bCollection = new List<B>();

            aCollection.Add(new A { TestMethodName = "Method1", FailedFor = "DPLServerURL" });
            aCollection.Add(new A { TestMethodName = "Method2", FailedFor = "DPLServerURL" });
            aCollection.Add(new A { TestMethodName = "Method3", FailedFor = "DPLServerURL" });
            aCollection.Add(new A { TestMethodName = "Method4", FailedFor = "DPLServerURL" });


            bCollection.Add(new B { TestMethodName = "Method1", FailedFor = "OrderXmlLocation" });
            bCollection.Add(new B { TestMethodName = "Method2", FailedFor = "OrderXmlLocation" });
            bCollection.Add(new B { TestMethodName = "Method5", FailedFor = "OrderXmlLocation" });

            var xx = bCollection.Union(aCollection).ToList();

        }

我收到错误作为 udner

Error   1   Instance argument: cannot convert from 'System.Collections.Generic.List<WindowsFormsApplication1.B>' to 'System.Linq.IQueryable<WindowsFormsApplication1.A>'

如何合并/合并这些实体?

谢谢

4

3 回答 3

2

代替

bCollection.Union(aCollection)

bCollection.Union<object>(aCollection)

这会IEnumerable<object>从其中的两个来源中为每个项目创建一个。您不能做任何更聪明的事情,因为尽管具有相同的属性,但您的类AB.

于 2013-03-01T11:35:00.033 回答
1

你可以试试这个:

private void button2_Click(object sender, EventArgs e)
{
    List<I> aCollection = new List<I>();
    List<I> bCollection = new List<I>();

    aCollection.Add(new A { TestMethodName = "Method1", FailedFor = "DPLServerURL" });
    aCollection.Add(new A { TestMethodName = "Method2", FailedFor = "DPLServerURL" });
    aCollection.Add(new A { TestMethodName = "Method3", FailedFor = "DPLServerURL" });
    aCollection.Add(new A { TestMethodName = "Method4", FailedFor = "DPLServerURL" });


    bCollection.Add(new B { TestMethodName = "Method1", FailedFor = "OrderXmlLocation" });
    bCollection.Add(new B { TestMethodName = "Method2", FailedFor = "OrderXmlLocation" });
    bCollection.Add(new B { TestMethodName = "Method5", FailedFor = "OrderXmlLocation" });

    var xx = bCollection.Union(aCollection).ToList();
}

public class A : I
{
    public string TestMethodName { get; set; }
    public string FailedFor { get; set; }
}

public class B : I
{
    public string TestMethodName { get; set; }
    public string FailedFor { get; set; }
}

public interface I
{
    string TestMethodName { get; set; }
    string FailedFor { get; set; }
}
于 2013-03-01T11:23:14.703 回答
1

正如在其他答案中所提到的那样,由于AB是不同的类型,您不能直接创建具有这两种类型的集合,尽管这些类具有相同的属性。你有几个选择:

  1. 创建一个匿名类型A的集合,该集合具有与和相同的属性B
  2. 创建A 和 B 继承自/实现的基类型/_interface_)
  3. 在和( )之间创建当前基类型的集合ABobject

选项 1 和 2 使您能够在不强制转换的情况下访问集合类型的属性,而选项 3 要求您将项目强制转换为另一个类以使其有用。

一个问题是 - 为什么你有两种看起来做同样事情的类型?

于 2013-03-01T13:45:44.510 回答