linq如何将对象连接到自身?

时间:2011-05-04 15:48:21

标签: linq join self

在下面的代码中,我正在尝试将对象加入到自身中。连接有点工作,但它给了我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 个答案:

答案 0 :(得分:2)

我怀疑您的values列表有两个条目。两者的joinOn值均为1,因此您最终会将两行匹配并相互匹配。因此,如果行是A和B,那么你将拥有

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