目前利用Linq To Object可以查询实现了IEnumerable<T>接口的未定义类型对象数组、自定义对象数组、泛型List和Dictionary、以及string等。当然进行编程之前要添加System.Core.dll引用和命名空间System.Linq,事实上VS2008已经在建立项目的时候自动添加了。

这次要做的是一个简单的winform程序主要用Linq to object来过滤字符集,然后绑定到相应的datagrid去。

先来看看完成后的效果图(通过鼠标点击改变测试字符集):
FontFilter.jpg

本实例省略调试代码!主要Linq实现步骤简述如下:
定义系统字符集
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        }

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有所不同.

可能遇到的问题: 字体"......"不支持样式"Regular",也许是由于系统字体库出了问题,更新一下.如果有更好的解决该Exception方法,请各位贴出来,谢谢!