cold
使用linq to sql优点也有缺点,优点是在项目开发过程中可以大大提高效率。缺点是执行效率不如sql 的执行效率高
正文
linqtosql的查询语句
1查询满足条件的记录。例如选择TitleofCourtesy=="Ms",并且根据结果的HireDate排序(返回的是一个结果集)
var a2 = from e2 in dc1.Employees
orderby e2.HireDate
where e2.TitleOfCourtesy == "Ms."
select e2;
输出:
foreach (var item in a2)
{
Console.WriteLine("雇员的日期顺序是{0},雇员的ID的是{1}", item.HireDate, item.EmployeeID);
}
2简单查询语句
有结果就输出,没结果就输出错误信息
var q = from p in dc.test where p.ID == 23 select p;//查询语句
if (q.Count() == 0)
{
Console.WriteLine("抱歉没有相关信息");
}
else
{
foreach (var g in q)//输出结果
{
Console.WriteLine("{0},{1}", g.专业, g.ID);
}
}
简单查询的另一种形式
var q2 = from p in dc.test
where p.ID == 23
select new
{
p.ID,
p.专业
};
var q1 = from p in dc.test where p.ID == 23 select p;//查询语句
if (q1.Count() == 0)
{
Console.WriteLine("抱歉没有相关信息");
}
else
{
foreach (var q2 in q1)
{
q2.专业 = "车辆";
}
}
3去重查询
var q2 = (from a in dc.test select a.ID).Distinct();
Console.WriteLine("这是不重复的查询");
foreach (var item in q2)
{
Console.WriteLine("学生的ID={0}", item);
}
4简单更新
var q1 = from p in dc.test where p.ID == 23 select p;//查询语句
if (q1.Count() == 0)//返回记录的条数
{
Console.WriteLine("抱歉没有相关信息");
}
else
{
foreach (var q2 in q1)//更新信息
{
q2.专业 = "车辆";
}
}
5简单删除
DataClasses1DataContext dc = new DataClasses1DataContext();
test test1 = dc.test.Where(p => p.ID == 23).FirstOrDefault();//删除语句的实现
dc.test.DeleteOnSubmit(test1);//删除操作
dc.SubmitChanges();//提交到数据库
6简单添加
因为不知道所添加的数据是否违反约束条件,所以使用了try catch的结构
try
{
test a = new test//生成一条新的纪录
{
ID = 23,
专业 = "艺术学院"
};
dc.test.InsertOnSubmit(a);//添加操作的实施
dc.SubmitChanges();//提交改变
}
catch (Exception x)
{
Console.WriteLine(x);
}
7Linq to sql 的sum用法
第一种方法
DataClasses1DataContext dc = new DataClasses1DataContext();
var q1 = dc.test.Select(p => p.ID).Sum();
Console.WriteLine("所有的学生的ID的总数(尽管没啥意义)={0}", q1);
第二种方法
var q2 = dc.test.Sum(p => p.ID);
Console.WriteLine("所有的学生的ID的总数(尽管没啥意义)={0}", q2);
8 Linq to sql 的MIN用法
第一种方法
var q1 = dc.test.Min(p => p.ID);
Console.WriteLine("学生ID的最小数{0}(尽管没啥意义)", q1);
第二种方法
var q2 = dc.test.Select(p => p.ID).Min();
Console.WriteLine("学生ID的最小数{0}(尽管没啥意义)", q1);
MAX同上述。
9 linq to sql的表之间的一对多的关系的处理
//对于多的那张表以EntitySetd的形式出现在单的那张表
var q =
from c in dc1.Customers
from o in c.Orders
where c.City == "London"
select o;
foreach (var item in q)
{
Console.WriteLine("符合条件的结果的ID={0}", item.CustomerID);
}
//2单表引用多表的信息(这里Orders引用CustomerID,一张订单只有一个客户,但一个客户可以有好多张订单
var q1 =
from c in dc1.Orders
where c.Customers.CustomerID == "ALFK"
select c;
10 Contains的用法
string[] customerID_Set =
new string[] { "VINET", "TOMSP", "HANAR" };
var q = (
from p in dc1.Orders
where customerID_Set.Contains(p.CustomerID)
select p).ToList();
foreach (var item in q)
{
Console.WriteLine("订单的customerID={0}", item.CustomerID);
}
11 Any的用法
from p in dc1.Customers
where !p.Orders.Any()//返回有订单的Customers
select p;
foreach (var item in q)
{
Console.WriteLine("用户的ID={0}", item.CustomerID);
}
Console.WriteLine("以上是使用Any的结果");
var q1 =
from p in dc1.Customers
where !p.Orders.Any(p1 => p1.ShipVia >= 3)
select p;
foreach (var item in q)
{
Console.WriteLine("用户的ID={0}", item.CustomerID);
}
Console.WriteLine("以上是使用Any并且使用了条件进行约束的结果");
12 group by的使用
var q =
from p in dc1.Orders
group p by p.EmployeeID into g
select new
{
EmployeeID = g.Key,
ShipViasum = g.Sum(p => p.ShipVia)
};
foreach (var item in q)
{
Console.WriteLine("{0},{1}", item.EmployeeID, item.ShipViasum);
}
//使用group by的并且计数
var q23 =
from p in dc1.Products
group p by p.CategoryID into g
select new//匿名使用
{
g.Key,
NumProducts = g.Count()
};
foreach (var item in q23)
{
Console.WriteLine("{0},{1}", item.Key, item.NumProducts);//输出
}
Console.WriteLine("以上是使用group by 并且计数的结果");
var q231 =
from p in dc1.Products
group p by p.CategoryID into g
select new
{
g.Key,
Num = g.Count(p => p.UnitPrice > 20)
};
foreach (var item in q231)
{
Console.WriteLine("{0},{1}", item.Key, item.Num);
}
Console.WriteLine("以上是使用group by 并且有条件计数的结果");
var q232 = from p in dc1.Products
group p by p.CategoryID into g
where g.Count()>=10
select new
{
g.Key,
Num = g.Count(p => p.UnitPrice > 20)
};
foreach (var item in q231)
{
Console.WriteLine("{0},{1}", item.Key, item.Num);
}
Console.WriteLine("以上是使用group by并且使用了where 并且有条件计数的结果");