Linq To Object实例之过滤字符集
目前利用Linq To Object可以查询实现了IEnumerable<T>接口的未定义类型对象数组、自定义对象数组、泛型List和Dictionary、以及string等。当然进行编程之前要添加System.Core.dll引用和命名空间System.Linq,事实上VS2008已经在建立项目的时候自动添加了。
这次要做的是一个简单的winform程序主要用Linq to object来过滤字符集,然后绑定到相应的datagrid去。
先来看看完成后的效果图(通过鼠标点击改变测试字符集):
本实例省略调试代码!主要Linq实现步骤简述如下:
定义系统字符集
private List<FontFamily> systemFont = new List<FontFamily>();
private List<FontFamily> systemFont = new List<FontFamily>();
1 /// <summary>
2 /// 获取已安装的字符集
3 /// </summary>
4 /// <returns>字符集list</returns>
5 private List<FontFamily> GetAllFont()
6 {
7
8 foreach (FontFamily f in FontFamily.Families)
9 {
10 systemFont.Add(new FontFamily(f.Name));
11
12 }
13 return systemFont;
14 }
2 /// 获取已安装的字符集
3 /// </summary>
4 /// <returns>字符集list</returns>
5 private List<FontFamily> GetAllFont()
6 {
7
8 foreach (FontFamily f in FontFamily.Families)
9 {
10 systemFont.Add(new FontFamily(f.Name));
11
12 }
13 return systemFont;
14 }
1 通过查询把结果集绑定到datagrid中去
var query
2 = from font in systemFont
3 where font.Name.ToLower().StartsWith(txtFontFilter.Text.ToLower())&&font.IsStyleAvailable(FontStyle.Regular)
4 select font;
5 //Gray Zhang给了很好的建议font.IsStyleAvailable(FontStyle.Regular),在此感谢!
6 dgvFont.DataSource = query.ToList();//这里的ToList是必须的,为了在winform中生成List进行显示. ASP.net有所不同.
var query
2 = from font in systemFont
3 where font.Name.ToLower().StartsWith(txtFontFilter.Text.ToLower())&&font.IsStyleAvailable(FontStyle.Regular)
4 select font;
5 //Gray Zhang给了很好的建议font.IsStyleAvailable(FontStyle.Regular),在此感谢!
6 dgvFont.DataSource = query.ToList();//这里的ToList是必须的,为了在winform中生成List进行显示. ASP.net有所不同.
可能遇到的问题: 字体"......"不支持样式"Regular",也许是由于系统字体库出了问题,更新一下.如果有更好的解决该Exception方法,请各位贴出来,谢谢!
附件