zoukankan      html  css  js  c++  java
  • LINQ查询代码整理(一)

    1. 利用三目运算符实现多条件组合查询

    代码
    var emailListInfos = from e in emailCtx
    where ((strEmailSubject == "请选择") ? true : (e.subject == strEmailSubject)) 
                     && ((e.senddate == null) ? false : (DateTime.Compare(dateConditionL, Convert.ToDateTime(e.senddate)) <= 0))  
                    && ((e.senddate == null) ? false : (DateTime.Compare(Convert.ToDateTime(e.senddate), dateConditionR.AddDays(1)) < 0))
    select e;

      上面的代码实现的是按“邮件主题”和“发送时间段”来查询邮件。因为e.senddate是可空类型的,所以加上了是否为空的验证,还做了类型转换。这之前已经把dateConditionL和dateConditionR处理为时间类型了。其中邮件主题是通过下拉框来选择的,所以加上了是否为初始的“请选择”的判断。

      像这种组合条件查询,当条件很多的时候,如果用if...else...产生的分支会很复杂,即使一气呵成的写完了,代码量也会很大。所以,利用三目运算代替if...else...分支就要简便很多。

      在网上查到的一种处理方法是引进一个扩展类,直接用AND或者OR追加条件实现动态查询。这里附上一个链接:http://www.cnblogs.com/killuakun/archive/2008/08/03/1259389.html

    2. 去除查询结果中某个字段有重复数据的行。

    代码
    class MyComparer : IEqualityComparer<User>
     {
        
    public bool Equals(User x, User y)
        {
          
    if (x == null && y == null)
          {
            
    return false;
    }
          
    else
          {
            
    return x.username == y.username;
    }
        } 

        
    public int GetHashCode(User obj)
        {
          
    return obj.username.GetHashCode();
        }
     }

      然后可以在查询语句后追加这行代码.AsEnumerable<User>().Distinct(new MyComparer());那么当结果集中有多条姓名相同的数据时,只会保留最先出现的一条。其中User是要查询的数据集合。

    本文首发于我的51CTO博客

  • 相关阅读:
    案例(2)-- 线程不安全对象(SimpleDateFormat)
    案例(1)-- OOM异常
    jvm--工具
    死锁的产生以及定位死锁
    TCP--粘包拆包,netty的解决方式
    netty--处理器
    AtomicIntegerFieldUpdater和AtomicInteger
    NIO--ByteBuf
    Pipeline
    吴恩达机器学习笔记(四) —— BP神经网络
  • 原文地址:https://www.cnblogs.com/xuezhizhang/p/1682786.html
Copyright © 2011-2022 走看看