代码之家  ›  专栏  ›  技术社区  ›  UnionP

LINQ到SQL:参数化键选择器导致LINQPad中的局部求值

  •  0
  • UnionP  · 技术社区  · 6 年前

    我有一个LINQ to SQL函数,允许将keySelector funct作为参数:

    Func<App, string> keySelector = a => a.Name;
    Apps.GroupBy(keySelector).Select(g => new { Key = g.Key, Count = g.Count() }).Dump();
    

    然而,当我查看生成的SQL时,很明显,超过初始表查询的所有内容都是在本地计算的,更糟糕的是,它查询表的每一列:

    SELECT [t0].[AppId], [t0].[Name], [t0].[PublisherId], [t0].[PlatformId], [t0].[UnifiedAppId]
    FROM [apps].[App] AS [t0]
    

    如果我改为内联指定keySelector函数,它将按预期工作:

    Apps.GroupBy(a => a.Name).Select(g => new { Key = g.Key, Count = g.Count() }).Dump();
    

    SELECT COUNT(*) AS [Count], [t0].[Name] AS [Key]
    FROM [apps].[App] AS [t0]
    GROUP BY [t0].[Name]
    

    你知道我该怎么做吗?谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   sgmoore    6 年前

    将KeySelector更改为表达式

    ie

    Expression<Func<App, string>> keySelector = a => a.Name;
    Apps.GroupBy(keySelector).Select(g => new { Key = g.Key, Count = g.Count() }).Dump();