1

これら 2 つのコレクションをマージするにはどうすればよいですか?

問題: ApplicationID が listOfPM および listOfPM2 にある場合、Test2 は null であり、数値である必要があります。

var listOfPM = from d in gbc
                select new Tab24PresentationModel
                {
                    ApplicationID = d.ApplicationID,
                    ApplicationName = d.ApplicationName,
                    Test1 = d.count,
                    Test2 = null
                };


var listOfPM2 = from d in gbc2
                select new Tab24PresentationModel
                {
                    ApplicationID = d.ApplicationID,
                    ApplicationName = d.ApplicationName,
                    Test1 = null,
                    Test2 = d.count
                };


var result = listOfPM.Union(listOfPM2);  

PM のリストから Test2 を削除し、それぞれの listOfPM2 から Test1 を削除しようとしたところ、次のようになりました。

タイプ 'xxx.Tab24PresentationModel' は、単一の LINQ to Entities クエリ内の構造的に互換性のない 2 つの初期化に表示されます。型は、同じクエリの 2 つの場所で初期化できますが、同じプロパティが両方の場所で設定され、それらのプロパティが同じ順序で設定されている場合に限ります。

複数の foreach を使用してこれを回避する方法を考えることができます..Linq を使用したいです!

4

2 に答える 2

0

2 つのオブジェクト (同じ ApplicationID を持つ) を手動でマージする必要があります。

編集 - これを試してください:

var list = gbc.Union( gbc2 ).ToLookup( d => d.ApplicationID ).Select( g =>
    {
        var first = g.First();
        var retVal = new Tab24PresentationModel
        {
            ApplicationID = first.ApplicationID,
            ApplicationName = first.ApplicationName,
            Test1 = first.count,
            Test2 = null
        };

        var second = g.Skip(1).Take(1).SingleOrDefault();

        if( null != second )
        {
            retVal.Test2 = second.count;
        }

        return retVal;
    } );

編集 2: hrm、gbc2 のみが存在する場合に必要ないTest1 = null, Test2 = value場合にのみ機能します。それが問題でなければ、あなたは大丈夫です。

于 2013-04-02T17:35:50.297 に答える