日期:2014-05-20  浏览次数:21161 次

linq的group by 缺陷?
最近遇到一个需要用linq来进行group by 分组的问题
我想实现的sql如下:
select * from table group by @param 
其中的@param为变量,可以由用户选择按什么来进行分组。如:状态,创建人等
但是在linq中却不能这么灵活的拼接字符串了~

我用linq写了一个按照固定字段“状态”来进行分组的语句。
难道linq真的无法实现这样的功能吗?
C# code
from ss in table
         group ss by ss.status into g
         select new
         {
             KEY = g.Key,
             COUNT = g.Count()
         }


------解决方案--------------------
List<A> List = new List<A>();
var P= List
.GroupBy(x => new { x.Age, x.Sex })
.Select(group => new {
Stu= group.Key, Count = group.Count()
});
foreach (var a in P) {
  
}


------解决方案--------------------
C# code

        from ss in table
        group ss by ss.GetType().GetProperty(@param) into g
        select new
        {
             KEY = g.Key,
             COUNT = g.Count()
        };

------解决方案--------------------
只能是指定的。
------解决方案--------------------
这情况还是只能用字符串拼凑
------解决方案--------------------
用lambda表达式树可以实现的

------解决方案--------------------
可以的,楼主要用自定义分组,类似于linq in action那本书里面有个自定义排序的例子

void CustomerGroup<TKey>(Func<Book,TKey> selector)
{
var books=
from book in books group book by selector(book) select book;
}

然后调用CustomerGroup(book=>book.任何属性)
------解决方案--------------------
sorry,忘写into了,完整地语句如下:

void CustomerGroup<TKey>(Func<Book,TKey> selector)
{
var books =
from book in Books
group book by selector(book) into pricebooks
select new { Price = pricebooks.Key, Title = pricebooks };

}
------解决方案--------------------
应该是可以的

------解决方案--------------------
#3楼 得分:0回复于:2009-12-08 09:28:55引用:
select * from table group by @param 

可以这样使用sql的吗??? 



这样是拼字符串的方式,意思是说后面的group by是可变的参数,根据传的值来进行分组,而不是写死。 
 
不寫死也不對呀 select * from table group by @param 
分組可用*呀??。。。。

------解决方案--------------------
你的table是什么类型?