0

我正在尝试动态使用 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;

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

4

1 回答 1

0

尝试这个:

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<Func<Customer, string>>是明确的。

于 2013-09-18T07:02:31.430 回答