`
380071587
  • 浏览: 448162 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

 
阅读更多
说明:在List<T>范型集合中提供了一类委托,以确定要寻找集合中的哪些符合条件的单个元素或者集合
msdn里描述如下:Predicate 委托,用于定义要搜索的元素应满足的条件。
这一点msdn帮助里面说得很简单,只以List<string>范型集合为例说了一些简单应用,这些完全不能满足
一些复杂的应用,比如查找集合中符合某些特性的单个元素或者元素集合,因为Predicate 委托只能使用
一个参数,写本文的目的就是说明如何满足复杂的要求在范型集合中查找元素
作者:周公
日期:2007-12-28(没办法,去年写好的文章,因为csdn的博客不行,拖到今年发了
首发地址:http://blog.csdn.net/zhoufoxcn

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;

namespaceListDemo
{
///<summary>
///首发地址:http://blog.csdn.net/zhoufoxcn
///大类别
///</summary>
publicclassCatalogInfo
{
privateintcatalogId;
privatestringcatalogName;

publicstringCatalogName
{
get{returncatalogName;}
set{catalogName=value;}
}

publicintCatalogId
{
get{returncatalogId;}
set{catalogId=value;}
}

publicCatalogInfo(intcatalogId,stringcatalogName)
{
this.catalogId=catalogId;
this.catalogName=catalogName;
}

}
}

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;

namespaceListDemo
{
///<summary>
///首发地址:http://blog.csdn.net/zhoufoxcn
///查找符合特定条件的CatalogInfo类
///</summary>
publicclassCatalogFinder
{
privateintcatalogId;

publicintCatalogId
{
get{returncatalogId;}
set{catalogId=value;}
}

publicCatalogFinder()
{
}

publicCatalogFinder(intcatalogId)
{
this.catalogId=catalogId;
}
///<summary>
///符合Predicate&gt;T&lt;match的方法
///</summary>
///<paramname="info"></param>
///<returns></returns>
publicboolFindByCatalogId(CatalogInfoinfo)
{
returninfo.CatalogId==catalogId;
}
}
}

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;

namespaceListDemo
{
///<summary>
///首发地址:http://blog.csdn.net/zhoufoxcn
///小类别
///</summary>
publicclassBoardInfo
{
privateintboardId;
privatestringboardName;
privateintcatalogId;
///<summary>
///所在大类别编号
///</summary>
publicintCatalogId
{
get{returncatalogId;}
set{catalogId=value;}
}


publicstringBoardName
{
get{returnboardName;}
set{boardName=value;}
}

publicintBoardId
{
get{returnboardId;}
set{boardId=value;}
}

publicBoardInfo(intboardId,stringboardName,intcatalogId)
{
this.boardId=boardId;
this.boardName=boardName;
this.catalogId=catalogId;
}

}
}

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

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

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

Console.WriteLine(
"=======在小类别中查找========");
BoardFinderboardFinder
=newBoardFinder();
boardFinder.BoardId
=25;
BoardInfoboardInfo
=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(BoardInfoinfoinboardInfoList)
{
Console.WriteLine(
"该小类别信息:小类别名称{0},所属大类别编号{1}",info.BoardName,info.CatalogId);
}

Console.ReadLine();
}
}
以下是输出结果:
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics