我正在尝试动态使用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;
在我迷失在表情的海洋中并引用之前,有人可以指出我正确的方向吗?
答案 0 :(得分: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>>
是明确的。