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>その中の 2 つのソースからの各項目が作成されます。同じプロパティを持っているにもかかわらず、クラス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

他の回答でほのめかされているように、Aとは異なるタイプであるため、同じプロパティを持つクラスにもかかわらず、両方のタイプでコレクションを直接B作成することはできません。いくつかのオプションがあります。

  1. およびと同じプロパティを持つ匿名タイプのコレクションを作成しますAB
  2. AとBが継承/実装する基本タイプ/_interface_)を作成します
  3. と()の間に現在の基本タイプのコレクションを作成しますABobject

オプション1と2を使用すると、キャストせずにコレクションタイプのプロパティにアクセスできるという利点がありますが、オプション3では、アイテムを別のクラスにキャストして便利にする必要があります。

1つの質問は、まったく同じことをするように見える2つのタイプがあるのはなぜですか?

于 2013-03-01T13:45:44.510 に答える