2011-03-08 27 views
-1

引用外部参数的SelectMany我想我已经得到了这个工作之前,但我没有看到它:来自内心的选择

折扣是Dictionary<PartType, double>。数据是List<PartType>

var d = discounts.Keys.SelectMany(
    k => 
    data.Where(l => l.PartTypeID.Equals(k.PartTypeID))) 
    .Select(s => new { k, l }); 

错误在于,名称'k'(和'l')在当前上下文中不存在。

我最终想要做的是将字典中的double应用于数据中所有匹配的PartType。

+0

你是什么意思'申请'?你想达到什么目的? – 2011-03-08 20:15:29

+0

通过应用,我的意思是PartType有一个属性DiscountPercent,我想将其设置为Dictionary中的值。但是我真正的问题是@Yuriy注意到新的{k,l}或{k,s}。 – 2011-03-08 20:19:56

回答

1

我怀疑你的意思是:

var d = discounts.Keys.SelectMany(
    k => data.Where(l => l.PartTypeID.Equals(k.PartTypeID)), 
    (k, l) => new { k, l }); 

...但它很难说没有更多的信息。说实话它看起来像像你真的想加入,例如

var d = discounts.Keys.Join(data, 
      k => k.PartTypeID, // Key from discounts.Keys 
      l => l.PartTypeID, // Key from data 
      (k, l) => new { k, l }); // Projection from the two values 
+0

你对这两方面都是正确的,但在另一个应用程序中,我有这样的似乎工作的东西: – 2011-03-08 20:31:18

+0

(糟糕,花了太长时间才得到该评论编辑) - 这是我之前的额外括号。选择我没有看到。 – 2011-03-08 20:40:48

0

l位于Where中的lambda的上下文中。我想你的意思是s => new {k, s}。另外你的括号看起来不对。在第3行,去年括号应该是4行

+0

你是对的,但'k'似乎仍然超出范围。 – 2011-03-08 20:19:16

+0

@凯利括号改变应该修复。 – 2011-03-08 20:19:51

+0

@凯利:你有一个太多的括号,它仍然在范围内,但不清楚你首先要做的是什么。 – 2011-03-08 20:19:52