Linq To Sql是另外一种更加安全方便的数据访问技术,它用于操作关系型数据库中的数据,基于关系型数据库中存在的关系数据模型建立与之相对应的对象关系模型,使用Linq To Sql对该模型的操作被转化成相应的SQL语句并在数据库中执行。下面是我用”LINQ to SQL”实现数据的CRUD和其他LinQ的一些查询:
class Program
{
static void Main(string[] args)
{
OrderDBDataContext dc = new OrderDBDataContext();
// MyAdd(dc);
// MyUpdate(dc);
// MySelect(dc);
//MyDelete(dc);
//GetCstmNo(dc);
// GetAvg(dc);
//GetMaxMinAvg(dc);
//CaseWhen(dc);
//OuterJoin(dc);
// InnerJoin(dc);
// OrderBy(dc);
//MyExists(dc);
//WhereIn(dc);
//MyUnion(dc);
//MyIntersect(dc);
//MyExcept(dc);
SkipTake(dc);
Console.ReadKey();
dc.SubmitChanges();
}
//1.获取表中指定某段的信息
private static void SkipTake(OrderDBDataContext dc)
{
var q = (
from p in dc.Product
select p
).Skip(3).Take(5);//获取从第4个产品开始的5个产品信息
foreach (var i in q)
{
Console.WriteLine("{0} {1} {2} {3}", i.productNo, i.productName, i.productClass, i.productPrice);
}
}
//2.去除顾客所在城市中和职员相同的城市
private static void MyExcept(OrderDBDataContext dc)
{
var city = (
from c in dc.Customer
select c.address
).Except(
from e in dc.Employee
select e.address
);
foreach (var w in city)
{
Console.WriteLine("{0}", w);
}
}
//3.查询顾客和职员同在的城市
private static void MyIntersect(OrderDBDataContext dc)
{
var city = (
from c in dc.Customer
select c.address
).Intersect(
from e in dc.Employee
select e.address
);
foreach (var w in city)
{
Console.WriteLine("{0}", w);
}
}
//4.查看有来自哪些城市的客户和员工
private static void MyUnion(OrderDBDataContext dc)
{
var city = (
from c in dc.Customer
select c.address
).Union(
from e in dc.Employee
select e.address
);
foreach (var w in city)
{
Console.WriteLine("{0}", w);
}
}
//5.查看指定的几个客户的订单
private static void WhereIn(OrderDBDataContext dc)
{
var aa = from p in dc.OrderMaster
where (
new string[] { "C20050001", "C20080001" }).Contains(p.customerNo)
select p;
foreach (var n in aa)
{
Console.WriteLine("{0} {1} {2} {3} {4} {5}", n.customerNo, n.orderNo, n.orderSum, n.orderDate, n.invoiceNo, n.salerNo);
}
}
//6.Exists存在的应用
private static void MyExists(OrderDBDataContext dc)
{
var no = from p in dc.Customer where !p.OrderMaster.Any() select p;
foreach (var n in no)
{
Console.WriteLine("{0} {1}", n.customerNo, n.customerName);
}
}
//7.多种方式排序的实现
private static void OrderBy(OrderDBDataContext dc)
{
//按从小到大
var shun = from p in dc.OrderDetail orderby p.price select p;
foreach (var s in shun)
{
Console.WriteLine("{0} {1} {2} {3}", s.orderNo, s.productNo, s.quantity, s.price);
}
Console.WriteLine("***********************************************************");
//按从大到小
var ni = from p in dc.OrderDetail orderby p.price descending select p;
foreach (var s in ni)
{
Console.WriteLine("{0} {1} {2} {3}", s.orderNo, s.productNo, s.quantity, s.price);
}
//多列排序的两种写法
//方法一
var list1 = from p in dc.OrderDetail orderby p.price, p.quantity select p;
foreach (var s in list1)
{
Console.WriteLine("{0} {1} {2} {3}", s.orderNo, s.productNo, s.quantity, s.price);
}
Console.WriteLine("***********************************************************");
//方法二
var list2 = from p in dc.OrderDetail.OrderBy(item => item.price).ThenBy(item => item.quantity) select p;
foreach (var s in list2)
{
Console.WriteLine("{0} {1} {2} {3}", s.orderNo, s.productNo, s.quantity, s.price);
}
}
//8.外连接的两种方法
private static void OuterJoin(OrderDBDataContext dc)
{
//方法一
var wai = from p in dc.Product
join o in dc.OrderDetail on p.productNo equals o.productNo into temp
from k in temp.DefaultIfEmpty()
select new { p.productNo, p.productName, k.quantity };
foreach (var i in wai)
{
Console.WriteLine("{0} {1} {2}", i.productNo, i.productName, i.quantity);
}
Console.WriteLine("***********************************************************");
//方法二
var wai1 = from p in dc.Product
from o in dc.OrderDetail.Where(item => item.productNo == p.productNo).DefaultIfEmpty()
select new { p.productNo, p.productName, o.quantity };
foreach (var i in wai1)
{
Console.WriteLine("{0} {1} {2}", i.productNo, i.productName, i.quantity);
}
Console.ReadKey();
}
//9.内连接的两种方法
private static void InnerJoin(OrderDBDataContext dc)
{
//方法一
var nei = from p in dc.Product
join o in dc.OrderDetail on p.productNo equals o.productNo
select new { p.productNo, p.productName, o.quantity };
foreach (var i in nei)
{
Console.WriteLine("{0} {1} {2}", i.productNo, i.productName, i.quantity);
}
Console.WriteLine("***********************************************************");
//方法二
var nei1 = from p in dc.Product
from o in dc.OrderDetail.Where(item => item.productNo == p.productNo)
select new { p.productNo, p.productName, o.quantity };
foreach (var i in nei1)
{
Console.WriteLine("{0} {1} {2}", i.productNo, i.productName, i.quantity);
}
Console.ReadKey();
}
//10.实现CASE WHEN条件选择,将员工电话为空改为Unknow
private static void CaseWhen(OrderDBDataContext dc)
{
var t = from y in dc.Employee
select new
{
No = y.employeeNo,
//tel = new
//{
telephone = y.telephone == null ? "Unknow" : y.telephone,
};
foreach (var g in t)
{
var d = from p in dc.Employee where p.employeeNo == g.No select p;//选出员工编号与t中相同的员工编号放入中d
foreach (var h in d)
{
h.telephone = g.telephone;//修改电话
}
}
}
//11.选出每一类产品的最贵产品、最便宜产品及产品均价
private static void GetMaxMinAvg(OrderDBDataContext dc)
{
var result = from p in dc.Product
group p by p.productClass into g
select new
{
g.Key,
EveryClassNum = g.Count(),
MaxPrice = g.Max(item => item.productPrice),
MinPrice = g.Min(item => item.productPrice),
AvgPrice = g.Average(item => item.productPrice),
};
foreach (var d in result)
{
Console.WriteLine("产品类型:{0} 共有{1}种 最贵:{2} 最便宜:{3} 平均价格:{4}", d.Key,d.EveryClassNum,d.MaxPrice,d.MinPrice,d.AvgPrice);
}
Console.ReadKey();
}
//12.获取产品价格的平均值三种写法
private static void GetAvg(OrderDBDataContext dc)
{
var AvgPrice1 = (from p in dc.Product select p.productPrice).Average();
var AvgPrice2 = dc.Product.Select(p => p.productPrice).Average();
var AvgPrice3 = dc.Product.Average(p => p.productPrice);
Console.WriteLine("{0} {1} {2}", AvgPrice1, AvgPrice2, AvgPrice3);
Console.ReadKey();
}
//13.获取有交易的客户编号(重复的去掉)
private static void GetCstmNo(OrderDBDataContext dc)
{
var CstmNo = (from o in dc.OrderMaster select new { customerNo = o.customerNo }).Distinct();//找出所有有交易的客户编号
foreach (var g in CstmNo)
{
Console.WriteLine("{0}", g.customerNo);
}
Console.ReadKey();
}
//14.修改某一产品的单价
private static void MyUpdate(OrderDBDataContext dc)
{
var pdct = from p in dc.Product where p.productNo == "P20050001" select p;//选出产品编号是P20050001的产品
foreach (var g in pdct)
{
g.productPrice = Convert.ToDecimal(89.90);
}
}
//15.查询某件产品的信息
private static void MySelect(OrderDBDataContext dc)
{
var pdct = from p in dc.Product where p.productNo == "P20050001" select p;//选出产品编号是P20050001的产品
foreach (var g in pdct)
{
Console.WriteLine("{0} {1} {2} {3}", g.productNo, g.productName, g.productClass, g.productPrice);
}
Console.ReadKey();
}
//16.新增一个客户信息
private static void MyAdd(OrderDBDataContext dc)
{
Customer addCstm = new Customer
{
customerNo = "C20090001",
customerName = "南昌电子技术有限公司",
telephone = "022-486752",
address = "南昌市",
zip = "546313"
};
dc.Customer.InsertOnSubmit(addCstm);
}
//17.删除一个客户信息
private static void MyDelete(OrderDBDataContext dc)
{
Customer Cstm = dc.Customer.Where(p => p.customerNo == "C20090001").FirstOrDefault();
dc.Customer.DeleteOnSubmit(Cstm);
}
}
}