zoukankan      html  css  js  c++  java
  • sql to linq的常用代码

    添加记录
    1、添加一条新纪录(例如:添加一条新闻)
        public static void addNewsInfo(NewsInfo entity)
        {
            using (SiteCMSDataContext db = new SiteCMSDataContext())
            {
                db.NewsInfo.InsertOnSubmit(entity);
                db.SubmitChanges();
            }
        }

    修改信息
    1、修改一条纪录(例如:更新新闻)
        public static void updateNewsInfo(NewsInfo entity)
        {
            using (SiteCMSDataContext db = new SiteCMSDataContext())
            {
                var temp = db.NewsInfo.Where(w => w.NewsID == entity.NewsID).SingleOrDefault();
                if (temp != null)
                {
                    temp.Title = entity.Title;
                    temp.SubTitle=entity.SubTitle;
                    temp.Source = entity.Source;
                    temp.Author = entity.Author;
                    temp.ClassID = entity.ClassID;
                    temp.Summary = entity.Summary;
                    temp.NewsDate = entity.NewsDate;
                    temp.Content = entity.Content;

                    db.SubmitChanges();
                }
            }
        }

    2、更新多条记 录(例如:将某个栏目的新闻作者统一更新,这种方式不好,建议在linq中 调用存储过程。直接把存储过程拖到linq to sql就可以当做方法来调用。
        public static void updateNewsByClassID(int classid,string author)
        {
            using (SiteCmsDataContext db = new SiteCmsDataContext())
            {
                var query = db.NewsInfo.Where(w => w.ClassID == classid);
                foreach (var temp in query)
                {
                    temp.Author = author;
                }
                db.SubmitChanges();
            }
        }

    删除记录
    1、 删除一条记录(指定主键)(例如:根据新闻的ID删除新闻)
        public static void deleteNewsInfo(int newsID)
        {
            using (SiteCMSDataContext db = new SiteCMSDataContext())
            {
                var temp = db.NewsInfo.Where(w => w.NewsID == newsID).SingleOrDefault();
                if (temp != null)
                {
                    db.NewsInfo.DeleteOnSubmit(temp);
                    db.SubmitChanges();
                }
            }
        }

    2、批量删除数据(指定主键数组)(例如:多选框选择新闻ID来删除新闻)
        public static void deleteNewsInfo(int[] newsID)
        {
            using (SiteCMSDataContext db = new SiteCMSDataContext())
            {
                var list = db.NewsInfo.Where(w => newsID.Contains(w.NewsID));
                db.NewsInfo.DeleteAllOnSubmit(list.ToList());
                db.SubmitChanges();
            }
        }

    3、删除符合指定条件的数据(无、一条、多条)(例 如:删除某个类别的新闻)
        public static void delNewsByClassID(int classid)
        {
            using (SiteCmsDataContext db = new SiteCmsDataContext())
            {
                var query = db.NewsInfo.Where(w => w.ClassID == classid);
                db.NewsInfo.DeleteAllOnSubmit(query);
                db.SubmitChanges();
            }
        }

    4、上面的删除多条记录是需要先把要删除的信息先 查询出来,然后再提交删除,看看老赵扩展的批量删除功能,用起来就方便多了。
    http://www.cnblogs.com/JeffreyZhao/archive/2008/03/05/LINQ-to-SQL-Batch-Delete-Extension.html

    获 取数据
    1、获取一条数据的详细信息(指定主键)(例如:根据新闻的ID来获取新闻内容)
    public static NewsInfo getNewsInfoDetail(int newsID)
        {
            using (SiteCMSDataContext db = new SiteCMSDataContext())
            {
                var temp = db.NewsInfo.Where(w => w.NewsID == newsID).SingleOrDefault();
                return temp;
            }
        }

    2、获取指定条件的记录(classID=0时,不加条件筛选)  (例如:获取某个栏目的新闻信息,一般数量不多的使用,多的就用分 页或者指定取的数量)  
    public static List<NewsInfo> getNewsInfo(int classID)
        {
            using (SiteCMSDataContext db = new SiteCMSDataContext())
            {
                    var query = from temp in db.NewsInfo
                                where ((classID == 0) || (temp.ClassID == classID))
                                orderby temp.IsTop descending, temp.NewsDate descending
                                select temp;
                    return query.ToList();  
            }
        }

    3、获取指定条件的几条记录(一般都要加上排序规则)(例如:提取最新的3条行业新闻)
        public static List<NewsInfo> getImageNewsInfo(int classID, int topNum)
        {
            using (SiteCMSDataContext db = new SiteCMSDataContext())
            {
                    var query = (from temp in db.NewsInfo
                                where ((classID == 0) || (temp.ClassID == classID))
                                orderby temp.IsTop descending, temp.NewsDate descending
                                select temp).Take(topNum);

                    return query.ToList();     
            }
        }

    4、获取分页记录(排序规则是必须的)(例如:最 常见的新闻分页,带点条件搜索,根据标题或者新闻栏目)
        public static List<NewsInfo> getNewsInfoList(string title, int classID, int curpage, int pagesize, out int records)
        {
            using (SiteCMSDataContext db = new SiteCMSDataContext())
            {
                records = (from temp in db.NewsInfo
                           where ((classID == 0) || (temp.ClassID == classID))
                           && SqlMethods.Like(temp.Title, "%" + title + "%")
                           select temp.NewsID).Count();

                int takes = curpage * pagesize;
                int skips = (curpage - 1) * pagesize;

                var query = (from temp in db.NewsInfo
                             where ((classID == 0) || (temp.ClassID == classID))
                             && SqlMethods.Like(temp.Title, "%" + title + "%")
                             orderby temp.NewsDate descending, temp.CreateDate descending
                             select temp).Take(takes).Skip(skips);
               
                return query.ToList();
            }
        }

    5、使用join处理多个表的数据联合(例 如:显示指定新闻分类名称的新闻,NewsInfo默认记录分类的ID)
    只输入一个表里的信息,在List后面可以明确对象
        public static List<NewsInfo> getNewsList(string className)
        {
            using (SiteCmsDataContext db = new SiteCmsDataContext())
            {
                var query = from temp1 in db.NewsInfo
                            join temp2 in db.ClassInfo
                            on temp1.ClassID equals temp2.ClassID
                            where temp2.ClassName == className
                            select temp1;
             
                return query.ToList();
            }
        }

    如果要输出两个表或者多个表里的字段,那 就需要使用匿名类,或者重新定义一个输出对象(继承某个表,然后加几个缺少的字段)
        public static List<Object> getNewsList(int classID)
        {
            using (SiteCmsDataContext db = new SiteCmsDataContext())
            {
                var query = from temp1 in db.NewsInfo
                            join temp2 in db.ClassInfo
                            on temp1.ClassID equals temp2.ClassID
                            where temp1.ClassID == classID
                            select new
                            {
                                NewsID=temp1.NewsID,
                                Title=temp1.Title,
                                ClassName=temp2.ClassName,
                                Content=temp1.Content
                            };

                //下面这块是不得以而为之,匿名类不允许隐式转换为 object对象。如果你直接在aspx.cs文件里使用,那就不存在这种问题。
                List<object> list = new List<object>();
                foreach (var o in query.ToList())
                {
                    list.Add(o);
                }

                return list;
            }
        }

    6、如果表之间本身就存在外键关系,在linq里的表对象自动会关 联,这种关联在多表查询的时候更方便。
    假设有表一:NewsInfo(字段:NewsID,Title,ClassID,Content)  表二:ClassInfo(ClassID,ClassName)
    表二的ClassID是表一的ClassID的外键(在sql里建立二者之间的 外键关系)


       public static List<NewsInfo> getNewsByClassName(string className)
        {
            using (SiteCmsDataContext db = new SiteCmsDataContext())
            {
                var query = from temp in db.NewsInfo
                            where temp.ClassInfo.ClassName == className
                            select temp;

                return query.ToList();
            }
        }

    7、linq使用嵌套查询(还是上面新闻和新 闻栏目的表结构)
        public static List<NewsInfo> getNewsByClassN(string className)
        {
            using (SiteCmsDataContext db = new SiteCmsDataContext())
            {
                var query = from temp in db.NewsInfo
                            where temp.ClassID == (from temp1 in db.ClassInfo
                                                   where temp1.ClassName == className
                                                   select temp1).Single().ClassID
                            select temp;
                return query.ToList();
            }
        }

    8、结合匿名类来实现投影查询(有外键关 联,例如:统计所有新闻分类的总浏览次数[分类下面新闻的浏览次数总和])
        public static List<Object> getNewsClassStat()
        {
            using (SiteCmsDataContext db = new SiteCmsDataContext())
            {
                var query = from temp in db.ClassInfo
                            select new
                            {
                                ClassID=temp.ClassID,
                                ClassName=temp.ClassName,
                                ViewNum=temp.NewsInfo.Sum(w=>w.ViewNum)
                            };
                List<object> list = new List<object>();
                foreach (var o in query.ToList())
                {
                    list.Add(o);
                }
                return list;
            }
        }

    9、linq的扩展查询方法(Average、Count、Sum、Max、Min等)
        public static int getNewsAvView()
        {
            using (SiteCmsDataContext db = new SiteCmsDataContext())
            {
                int avView =(int) db.NewsInfo.Average(w => w.ViewNum);
                return avView;
            }
        }

    其他:
    1、获取新插入记录的自增长ID(例如:在注册完之后就自动登 录,需要用到自增长字段来设置session等)
     public static int addNewsInfo(NewsInfo entity)
        {
            using (SiteCMSDataContext db = new SiteCMSDataContext())
            {
                db.NewsInfo.InsertOnSubmit(entity);
                db.SubmitChanges();
                 int newsID=entity.NewsID;
                 return newsID;
            }
        }

  • 相关阅读:
    实时web应用方案——SignalR(.net core) 理论篇
    Performance Improvements in .NET Core 3.0
    在Asp.NET Core中如何管理用户机密数据
    NetCore 配置文件---直接读取及选项模式读取
    NetCore WebApi 及 搭建Swagger
    奇妙的 CSS MASK
    基于Docker安装并使用Elastic APM实现指标监控
    记录HBase手动删除Hadoop备份(archive)文件后,引发Hbase写入数据出错等一系列问题处理
    arm-linux-gcc 规定 char 为 unsigned char 导致程序运行出错
    linux下生成core dump文件方法及设置
  • 原文地址:https://www.cnblogs.com/yeagen/p/1780913.html
Copyright © 2011-2022 走看看