Как linq соединяет объект с самим собой? - PullRequest
0 голосов
/ 04 мая 2011

В приведенном ниже коде я пытаюсь присоединить объект к себе. Соединение вроде работает, но оно дает мне 4 строки вместо ожидаемой 1 строки с обоими значениями в одном и том же новом объекте, а не 4 копиями одного и того же объекта. Спасибо !!

  var values = rptDataPkg.Datasets.Item(0).Result.AsEnumerable()
 .Where(f => f.Field<int>("RowType") == 3 && 
             f.Field<int>("Category") == 1 && 
           ((f.Field<int>("ItemID") == -1000) || (f.Field<int>("ItemID") == -1001)))
.Select(f => new
{    
   joinOn = 1,
   Proc = f.Field<string>("Item"),
   fieldVal = Convert.ToDecimal(f.Field<decimal?>(field))
}).ToList();

var join = values.Join(values, b1 => b1.joinOn, b2 => b2.joinOn, 
           (b1, b2) => new
            {
                inHVal = b1.fieldVal,
                offSVal = b2.fieldVal
            });

1 Ответ

2 голосов
/ 04 мая 2011

Я подозреваю, что в вашем списке values есть две записи.Оба будут иметь значение joinOn, равное 1, так что вы получите строки, совпадающие друг с другом.Так что, если строки A и B, у вас будет

(A, A)
(A, B)
(B, A)
(B, B)
...