LINQ在group by子句中使用局部变量

时间:2013-06-07 13:34:46

标签: c# linq

这可能是非常直接的,但我似乎无法解决它。基本上,我有一个相当复杂的陈述,其中一部分如下所示:

from a in context.ALLProducts
join m in context.Mappings on a.LegislationID equals m.LegislationCode into map
from subMap in map.DefaultIfEmpty()
let mapping = (subMap.LegislationCode != null) ? subMap.OldLegislationCode : a.LegislationID
...
group a by new { a.ProductCode, a.LanguageID, mapping, a.FormulaID } into g

查询在映射表上做了一个链接,它可能或者可能没有与legisId的匹配,所以我做了一个左连接,然后将结果存储在一个名为mapping的局部变量中,该变量将是映射值或第一个表(a)中的值。现在我需要做的是在我的group语句中包含映射变量,但它无法识别,大概是因为我在表a中进行分组。

任何人都知道如何获取映射值,以便在我对数据进行分组后可以使用它吗?

非常感谢

安德鲁

1 个答案:

答案 0 :(得分:2)

在为subMap变量赋值之前,您应验证mapping是否有值:

from a in context.ALLProducts
join m in context.Mappings 
     on a.LegislationID equals m.LegislationCode into map
from subMap in map.DefaultIfEmpty()
let mapping = (subMap != null) ? // here
               subMap.OldLegislationCode : a.LegislationID
group a by new { a.ProductCode, a.LanguageID, mapping, a.FormulaID } into g
select g;