LINQ查询代码整理(一)

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

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
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. 去除查询结果中某个字段有重复数据的行。

ContractedBlock.gif ExpandedBlockStart.gif 代码
 
   
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博客

转载于:https://www.cnblogs.com/xuezhizhang/archive/2010/03/10/1682786.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值