• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

IT-哲

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

浅谈Linq to object,Linq to dataset

自从.net FrameWork 3.5版本之后,引入了Linq技术,使得C#程序开发进入了一个崭新的时期,今天我们就简单描述一下 如何使用linq对List与DataTable的操作。

DataTable或许对于初学者来说,是个再熟悉不过的东西,它贯穿在我们ADO.NET模块的许多的方法里,从数据源获取到的数据,返回一个dataTable,简单,高效。

然而这个时候我们总会发现,当我们对已有的数据进行筛选的时候,到底需要不需要去重新查询数据库?

答案是否定的,Linq技术可以帮我们解决这个问题。

现在我们看一下是如何操作的。

首先先构造出一个DataTable,我默认你了解如何操作DataTable,模拟从数据库取出的数据。

   DataTable dt = new DataTable();
            dt.Columns.Add("Id");
            dt.Columns.Add("Name");
            for (int i = 1; i <= 10; i++)
            {
                DataRow dr = dt.NewRow();
                dr["Id"] = i;
                dr["Name"] = "我叫" + i;
                dt.Rows.Add(dr);
            }

这样就得到了一个DataTable,一共有10行,每行都是Id=i Name=我叫i

下面我们去操作这个DataTable,首先我们想要筛选出Id>5的所有数据。

     var query= dt.AsEnumerable().Where(r => Convert.ToInt32(r.Field<object>("Id")) > 5);

筛选的格式很明确,首先把DT转换为泛型(只有泛型允许使用Where方法),而Where方法的参数是一个Func,所以我们可以通过lambda表达式去实现一个具有返回值的匿名方法,如何不了解Func与Action去看我的第一篇文章。

现在我们只想找到Name一列的数据

List<string> list = query.Select(c => c.Field<string>("Name")).ToList();

现在我们想要的数据就都已经在这个list中了,现在从控制台数据结果。

详细一般朋友都会选择用Foreach去遍历这个list,而现在提供给大家一个好方法,就是list的迭代方法。

  list.ForEach(s => { Console.WriteLine(s); });

注意ForEach方法的参数是Action类型,所以该匿名方法的代码段内只能具有操作,而不能返回结果。

最后整合下我们的代码:

 dt.AsEnumerable().Where(r => Convert.ToInt32(r.Field<object>("Id")) > 5).Select(c => c.Field<string>("Name")).ToList<string>().ForEach(s => { Console.WriteLine(s); });
            Console.ReadLine();

就是这样,只需一行代码就可以完成我们全部的操作,是不是很方便?

看完DataTable的操作,再去看看List的操作,就简单多了。

        static void Main(string[] args)
        {
            var list = new List<Model>();
            for (var i = 1; i <= 10; i++)
            {
                list.Add(new Model() { Id = i, Name = "我叫" + i });
            }
            list.Where(r => r.Id > 5).Select(w => w.Name).ToList().ForEach(s => Console.WriteLine(s));
            Console.ReadLine();
        }

List本身就是泛型,所以不需要通过AsEnumerable()去转换为泛型。

关于Linq的一些简单操作就先介绍到这,祝大家学习愉快。

 

posted on 2013-04-16 13:23  IT-哲  阅读(304)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3