【问题标题】:Build a LINQ to SQL Group By Property Expression按属性表达式构建 LINQ to SQL 组
【发布时间】:2013-09-17 12:24:07
【问题描述】:

我正在尝试动态使用 GroupBy,我知道这对于 LINQ to SQL 来说是一个很大的禁忌,但我认为这可能会奏效。我只需要表达式语法方面的帮助。

举个简单的例子:

var grouped = from c in ctx.Customers
              group c by c.LastName into Group
              select Group;

我希望能够根据用户的偏好按名字或姓氏进行分组。现在我知道 LINQ 必须在这里构建一个 SQL 兼容的表达式,但我只是想换掉它将用于构建最终 SQL 命令的属性。

所以我一直在尝试类似的东西:

private Expression<Func<Customer, TKey>> GetColumn<TKey>(Customer c, 
  GroupingType g)
{
    if(g == GroupingType.First)
        var e = Expression<Func<Customer, string>> l = () => c.FirstName; //Here
    // etc...
}

var groupingType = GroupingType.First;

var grouped = from c in ctx.Customers
              group c by GetColumn<string>(c, groupingType) into Group
              select Group;

在我迷失在表达和调用的海洋中之前,有人能指出正确的方向吗?

【问题讨论】:

    标签: c# linq linq-to-sql lambda expression


    【解决方案1】:

    试试这个:

    bool byLastName = true;
    
    Expression<Func<Customer, string>> exp;
    
    if (byLastName)
    {
        exp = p => p.LastName;
    }
    else
    {
        exp = p => p.FirstName;
    }
    
    var grouped = ctx.Customers.GroupBy(exp);
    

    有时,LINQ 的函数式语法比from... select... 语法更易于使用。这里Expression&lt;Func&lt;Customer, string&gt;&gt; 的使用是明确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      相关资源
      最近更新 更多