Linq的常用查询和操作总结实例

简单的LINQ查询
static void Main(string[] args)
{
    int[] marks = { 60, 77, 82, 46, 59, 98, 100, 84 };//定义一个数组
    var good = from m in marks//使用LINQ找到所有数值大于等于60的数字
               where m >= 60
               select m;
    foreach (int mark in good)//循环每一个结果
    {
        Console.WriteLine(mark);//输出结果
    }
}

使用Lambda表达式的LINQ查询
static void Main(string[] args)
{
    int[] marks = { 60, 77, 82, 46, 59, 98, 100, 84 };
    var good = marks.Where(m => m >= 60);//使用Lambda表达式查询数值大于等于60的数字
    foreach (int mark in good)//循环每一个结果
    {
        Console.WriteLine(mark);//输出结果
    }
}

使用LINQ查询对象集合
class Program
{
static void Main(string[] args)
{
    List<Student> students = new List<Student>//申明Student对象的集合
    {
new Student{ StudentID=1, Sex=true, Name="何欢", Birthday=Convert.ToDateTime("1984-1-1")},
new Student{ StudentID=2, Sex=false, Name="晏婉", Birthday=Convert.ToDateTime("1983-5-1")},
new Student{ StudentID=3, Sex=true, Name="高伟", Birthday=Convert.ToDateTime("1983-2-15")},
new Student{ StudentID=4, Sex=false, Name="叮叮", Birthday=Convert.ToDateTime("1985-3-8")}
    };
//接下来使用LINQ查询所有年龄小于25岁的男性
    var names = from s in students
                where s.Sex == true&&s.GetAge()<25 //调用对象的方法
                select s.Name;
    foreach (string name in names)//循环输出结果
    {
        Console.WriteLine(name);
    }
}
}
public class Student  //定义Student类
{
//以下是定义类中属性
 public string Name { get; set; }
 public int StudentID { get; set; }
 public bool Sex { get; set; }
 public DateTime Birthday { get; set; }
//以下是定义类中的方法
 public int GetAge()
 {
     return DateTime.Now.Year - Birthday.Year;
 }
}

--
--11.8.2节示例
--

--创建示例数据库
CREATE TABLE Class --创建班级表
(
 ClassID INT PRIMARY KEY,
 ClassName NVARCHAR(20) NOT NULL
)
GO
CREATE TABLE Student --创建学生表
(
 StudentID INT IDENTITY PRIMARY KEY,
 NAME NVARCHAR(10) NOT NULL,
 Sex BIT NOT NULL,
 BirthDay DATETIME NOT NULL,
 ClassID INT NOT NULL,
 --以下定义的是外键约束
 CONSTRAINT FK_Student_Class FOREIGN KEY(ClassID) REFERENCES Class(ClassID)
)
GO
--以下是插入示例数据
INSERT INTO Class VALUES(1,'200801');
INSERT INTO Class VALUES(2,'200802');
INSERT INTO Student ([NAME],Sex,BirthDay,ClassID) VALUES ('张三',1,'1982-1-12',1)
INSERT INTO Student ([NAME],Sex,BirthDay,ClassID) VALUES ('李四',1,'1983-11-2',1)
INSERT INTO Student ([NAME],Sex,BirthDay,ClassID) VALUES ('何欢',1,'1982-8-6',2)
INSERT INTO Student ([NAME],Sex,BirthDay,ClassID) VALUES ('晏婉',0,'1983-6-15',2) 

通过StuDataClassesDataContext查询学生
static void Main(string[] args)
{
    StuDataClassesDataContext context=new StuDataClassesDataContext();//申明对象
    var students=from s in context.Student //LINQ查询所有学生的名字
                 select s.NAME;
    foreach(var name in students) //循环输出所有学生的姓名
    {
        Console.WriteLine(name);
    }
}

--
--11.8.3节示例
--

使用LINQ的多表联接查询
static void Main(string[] args)
{
    StuDataClassesDataContext context=new StuDataClassesDataContext();
    var students = from s in context.Student
                   from c in context.Class
                   where s.ClassID == c.ClassID //相当于连接两个表
                   select new //返回了学生的名字和班级的名字
                   {
                       s.NAME,
                       c.ClassName
                   };
    foreach(var o in students) //循环输出所有学生的名字和对应班级的名字
    {
        Console.WriteLine(o.NAME+" "+o.ClassName);
    }
}

使用LINQ进行外联结查询
var students = from s in context.Student
           join c in context.Class
           on s.ClassID equals c.ClassID into cla
           from cl in cla.DefaultIfEmpty()  //这里相当于一个外联结操作
           select new
           {
               s.NAME,
               cl.ClassName
           };

使用LINQ进行嵌套查询
var students = from c in context.Class
           join s in context.Student
           on c.ClassID equals s.ClassID into st //嵌套查询
           select new //输出班级的名字和班级中的学生数
           {
              c.ClassName,
              StudentCount=st.Count()
           };

--
--11.8.4节示例
--

在LINQ中使用分组查询
var students = from s in context.Student
           group s by s.Sex into sex //使用Sex属性进行分组
           select new//输出性别和性别对应的人数
           {
               Sex = sex.Key,
               Count = sex.Count()
           };

使用LINQ进行排序
var students = from s in context.Student
           orderby s.NAME descending //使用Name进行反序排列
           select s.NAME;

使用LINQ进行Union操作
var students = (from s in context.Student
            select s.NAME).Concat //联合下一个查询
           (from c in context.Class
            select c.ClassName);

使用LINQ进行分页查询
var students = (from s in context.Student
            orderby s.NAME
            select s.NAME).Skip(2).Take(2); //分页操作

使用SqlMethods类进行LINQ的LIKE查询
var students = from s in context.Student
           where SqlMethods.Like(s.NAME,"张%")  //对Name进行Like查询
           select s.NAME;

--
--11.8.5节示例
--

使用LINQ to SQL修改数据
StuDataClassesDataContext db=new StuDataClassesDataContext();
Student student = db.Student.First(s => s.StudentID == 1); //找到学生ID为1的学生对象
student.NAME = "张润"; //修改该学生对象的姓名
db.SubmitChanges(); //提交修改

使用LINQ to SQL删除数据
StuDataClassesDataContext db = new StuDataClassesDataContext();
var cla = from c in db.Class //找到班级ID为3的班级对象
      where c.ClassID == 3
      select c;
db.Class.DeleteOnSubmit(cla); //删除该班级对象
db.SubmitChanges(); //提交删除操作

--
--11.8.6节示例
--

创建存储过程
CREATE PROC GetStudentByID --创建一个简单的存储过程
@id INT --参数
AS
SELECT *  --简单的SQL查询
FROM Student
WHERE StudentID=@id

在LINQ to SQL中调用存储过程
StuDataClassesDataContext db = new StuDataClassesDataContext();
var student = db.GetStudentByID(1);  调用//存储过程对应的方法
foreach (var s in student)
{
 Console.WriteLine(s.NAME); //输出存储过程返回的结果中的Name列
}

在LINQ to SQL中执行SQL语句查询
StuDataClassesDataContext db = new StuDataClassesDataContext();
var cla = db.ExecuteQuery<Class>("select * from Class");  //定义SQL查询语句并执行
foreach (var c in cla)  //循环输出查询返回的每一个结果
{
 Console.WriteLine(c.ClassID+" "+c.ClassName);
}

在LINQ to SQL中执行SQL语句
StuDataClassesDataContext db = new StuDataClassesDataContext();
//以下代码执行数据库修改,并返回受影响的行数
int count=db.ExecuteCommand("update Student set Birthday='1983-12-11' where StudentID=4");
Console.WriteLine(count);//输出结果:1

在LINQ to SQL中使用事务
StuDataClassesDataContext db = new StuDataClassesDataContext();
SqlConnection conn = (SqlConnection)db.Connection;//获得连接
conn.Open();//打开连接
SqlTransaction trans = (SqlTransaction)db.Connection.BeginTransaction();//创建事务
db.Transaction = trans;//将事务赋予LINQ to SQL实例
try
{
 db.Student.DeleteAllOnSubmit(from s in db.Student //删除班级ID为1的所有学生
                              where s.ClassID == 1
                              select s);
 db.Class.DeleteAllOnSubmit(from c in db.Class  //删除班级ID为1的所有班级
                            where c.ClassID == 1
                            select c);
 db.SubmitChanges(); //提交更改
 trans.Commit();   //提交事务
}
catch //发生异常时回滚事务
{
 trans.Rollback();
}
finally //关闭连接
{
 conn.Close();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值