在List范型集合中实现自定义条件复杂查询

 
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  ListDemo
{
    
///   <summary>
    
///  首发地址: http://blog.csdn.net/zhoufoxcn
    
///  大类别
    
///   </summary>
     public   class  CatalogInfo
    {
        
private   int  catalogId;
        
private   string  catalogName;

        
public   string  CatalogName
        {
            
get  {  return  catalogName; }
            
set  { catalogName  =  value; }
        }
    
        
public   int  CatalogId
        {
            
get  {  return  catalogId; }
            
set  { catalogId  =  value; }
        }

        
public  CatalogInfo( int  catalogId,  string  catalogName)
        {
            
this .catalogId  =  catalogId;
            
this .catalogName  =  catalogName;
        }
    
    }
}

 
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  ListDemo
{
    
///   <summary>
    
///  首发地址: http://blog.csdn.net/zhoufoxcn
    
///  查找符合特定条件的CatalogInfo类
    
///   </summary>
     public   class  CatalogFinder
    {
        
private   int  catalogId;

        
public   int  CatalogId
        {
            
get  {  return  catalogId; }
            
set  { catalogId  =  value; }
        }

        
public  CatalogFinder()
        {
        }
    
        
public  CatalogFinder( int  catalogId)
        {
            
this .catalogId  =  catalogId;
        }
        
///   <summary>
        
///  符合Predicate&gt;T&lt; match的方法
        
///   </summary>
        
///   <param name="info"></param>
        
///   <returns></returns>
         public   bool  FindByCatalogId(CatalogInfo info)
        {
            
return  info.CatalogId  ==  catalogId;
        }
    }
}

 

using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  ListDemo
{
    
///   <summary>
    
///  首发地址: http://blog.csdn.net/zhoufoxcn
    
///  小类别
    
///   </summary>
     public   class  BoardInfo
    {
        
private   int  boardId;
        
private   string  boardName;
        
private   int  catalogId;
        
///   <summary>
        
///  所在大类别编号
        
///   </summary>
         public   int  CatalogId
        {
            
get  {  return  catalogId; }
            
set  { catalogId  =  value; }
        }
    

        
public   string  BoardName
        {
            
get  {  return  boardName; }
            
set  { boardName  =  value; }
        }
    
        
public   int  BoardId
        {
            
get  {  return  boardId; }
            
set  { boardId  =  value; }
        }

        
public  BoardInfo( int  boardId,  string  boardName,  int  catalogId)
        {
            
this .boardId  =  boardId;
            
this .boardName  =  boardName;
            
this .catalogId  =  catalogId;
        }
    
    }
}

上面分别是两个范型集合中用到的实体,以及将来要用于查找这些实体的辅助类,下面距离说明用法:
using  System;
using  System.Collections.Generic;
using  System.Drawing.Imaging;
using  ListDemo;

///   <summary>
///  说明:在List <T> 范型集合中提供了一类委托,以确定要寻找集合中的哪些符合条件的单个元素或者集合
///  msdn里描述如下:Predicate 委托,用于定义要搜索的元素应满足的条件。
///  这一点msdn帮助里面说得很简单,只以List <string> 范型集合为例说了一些简单应用,这些完全不能满足
///  一些复杂的应用,比如查找集合中符合某些特性的单个元素或者元素集合,因为Predicate 委托只能使用
///  一个参数,写本文的目的就是说明如何满足复杂的要求在范型集合中查找元素
///  作者:周公
///  日期:2007-12-28
///  首发地址: http://blog.csdn.net/zhoufoxcn
///   </summary>
public   class  Example
{
    
public   static   void  Main()
    {
        
// 初始化大类别集合
        List < CatalogInfo >  catalogList  =   new  List < CatalogInfo > ( 10 );
        
for  ( int  i  =   0 ; i  < 10 ; i ++ )
        {
            catalogList.Add(
new  CatalogInfo(i,  " 大类别 "   +  i));
        }

        
// 初始化小类别集合,随机指定它们的大类别编号
        List < BoardInfo >  boardList  =   new  List < BoardInfo > ( 50 );
        Random random
= new  Random( 100 );
        
for  ( int  i  =   0 ; i  <   100 ; i ++ )
        {
            boardList.Add(
new  BoardInfo(i,  " 小类别 "   +  i, random.Next()  %   10 ));
        }
        Console.WriteLine(
" =======在大类别中查找======== " );
        CatalogFinder catalogFinder 
=   new  CatalogFinder( 5 );
        CatalogInfo catalogInfo 
=  catalogList.Find(catalogFinder.FindByCatalogId);
        Console.WriteLine(
" 该大类别的名称: "   +  catalogInfo.CatalogName);

        Console.WriteLine(
" =======在小类别中查找======== " );
        BoardFinder boardFinder 
=   new  BoardFinder();
        boardFinder.BoardId 
=   25 ;
        BoardInfo boardInfo 
=  boardList.Find(boardFinder.FindByBoardId);
        Console.WriteLine(
" 该小类别信息:小类别名称{0},所属大类别编号{1} " , boardInfo.BoardName, boardInfo.CatalogId);

        Console.WriteLine(
" =======在小类别中按大类别编号查找======== " );
        boardFinder.CatalogId 
=   9 ;
        List
< BoardInfo >  boardInfoList  =  boardList.FindAll(boardFinder.FindByCatalogId);
        
foreach  (BoardInfo info  in  boardInfoList)
        {
            Console.WriteLine(
" 该小类别信息:小类别名称{0},所属大类别编号{1} " , info.BoardName, info.CatalogId);
        }

    
        Console.ReadLine();
    }
}
以下是输出结果:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值