Linq学习小结

最近频繁接触Linq,收获巨大。linq不但可以直接执行sql语句,还能通过动态Linq组合字符串参数得到查询结果,期间还弱弱的使用了下反射机制组合lamdba(拉姆达)表达式进行匿名排序,下面做些小结,方面以后编程随时翻查。

动态Linq的demo可以在该网站找到:http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx,翻到下面找到 Basic Dynamic LINQ C# Sample 下载即可。其实当我下载完该demo,我才发现公司平台也已经封装好类似的动态linq了,名为DynamicQueryable。很好很强大啊,直接用就好了。

在写linq过程中,我喜欢用lamdba表达式,尽量不用from t in db.Table这种写法。在进行对查询结果分组后排序时,一般的linq写法是:

    var entity=db.Table.Where(o=>o.field1.Equals(1) && o.field2>8).GroupBy(g=>new {g.field1,g.field2,g.field3,g.field4}).OrderBy(t=>t.Key.field1); 

为了能动态传参数到linq查询里,这时动态linq派上用场了,使用了牛人们写好的DynamicLibrary.cs类或DynamicQueryable.cs,引用必要的命名空间,上面的linq语句就可以用字符串作参数传进去了,可改写成:

    var entity=db.Table.Where("field1=1 and field2>8").GroupBy("field1,field2,field3,field4").OrderBy("field1");

这样就和常规的SQL语句组合一样使用,相当方面,详细可参考该网址:http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

若不使用动态linq,利用反射机制组合lamdba表达式,也可以达到效果,以排序的OrderBy为例,传入要排序的列名字符串,得到查询结果,代码如下:

    /// <summary>
    /// 利用反射机制获取列名
    /// </summary>
    private object GetPropertyValue(object obj, string property)
    {
       System.Reflection.PropertyInfo propertyInfo = obj.GetType().GetProperty(property);
       return propertyInfo.GetValue(obj, null);
    }  

    string fieldname="SortIndex";
    var entity=db.Table.OrderBy(l => GetPropertyValue(l, fieldname); //升序排列
    var entity=db.Table.OrderByDescending(l => GetPropertyValue(l, fieldname); //降序排列

轻松实现变量参数结合lamdba表达式,返回linq查询结果,目前仅对OrderBy操作实践成功。另外在网上还找到了一款用于Linq运算和测试的工具:LinqPad,功能丰富,操作简单,可像SQL新建查询那样敲入linq语句,检查linq语法并返回查询结果,该工具的下载地址是:http://www.linqpad.net/

好了,搞掂收工回家~

11.15更新:可以利用Func委托定义一个lamdba表达式作为参数传进Linq。

    Func<Table, object> objPredicate = l => GetPropertyValue(l, array[0].Trim());
    var entity=db.Table.OrderBy(objPredicate); //升序排列
    var entity=db.Table.OrderByDescending(objPredicate); //降序排列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CSICSICSICSI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值