.NET LINQ 通常分 Syntax Query 和Syntax Method

  • A+
所属分类:未分类

.NET LINQ 通常分 Syntax Query 和Syntax Method
LINQ To SQL 增、删、改
添加 InsertOnSubmit(单个对象) 或 InsertAllOnSubmit(集合)
删除 DeleteOnSubmit (单个对象) DeleteAllOnSubmit(集合)
SubmitChanges() 提交数据库
//创建LINQDB数据库上下文的实例
添加
LinqDBDataContext db = new LinqDBDataContext(LinqSystem.LinqDBConnectionString);
//创建用户对象
UserInfo user = new UserInfo();
user.Username = t_UserName.Text; //赋值
user.Password = t_PassWord.Text;
user.Email = t_Email.Text;
try
{

db.UserInfo.InsertOnSubmit(user);//添加到数据库中
db.SubmitChanges();//提交更新
Response.Write(“”);
}
catch (Exception)
{

throw;
}
更新
LinqDBDataContext db = new LinqDBDataContext(LinqSystem.LinqDBConnectionString);
var result = from u in db.UserInfo
where u.ID == Convert.ToInt32(e.CommandArgument)
select u; //找到需要修改记录
foreach (var item in result) //重新赋值
{

item.Username = t_UserName.Text;
item.Email = t_Email.Text;
}
db.SubmitChanges();//提交修改
删除
LinqDBDataContext db = new LinqDBDataContext(LinqSystem.LinqDBConnectionString);
int id=Convert.ToInt32(e.CommandArgument);
var result = from UserInfo u in db.UserInfo
where u.ID == id
select u; //找到需要删除的记录
db.UserInfo.DeleteAllOnSubmit(result);
db.SubmitChanges();

1、Syntax Query
var xx=from i in x select i
2、Syntax Method
var db1=db.table.where(r=>r.age>10)

1、本地方法调用形式(LocalMethodCall)
var q = from c in db.Customers
where c.Country == “UK” || c.Country == “USA”
select new
{

c.CustomerID,
c.CompanyName,
Phone = c.Phone,
InternationalPhone = PhoneNumberConverter(c.Country, c.Phone)
};
public string PhoneNumberConverter(string Country, string Phone)
{

Phone = Phone.Replace(" “, “”).Replace(”)", “)-”);
switch (Country)
{

case “USA”:
return “1-” + Phone;
case “UK”:
return “44-” + Phone;
default:
return Phone;
}
}
2、指定类型形式: 使用SELECT和已知类型返回雇员姓名的序列
var q =
from e in db.Employees
select new Name
{

FirstName = e.FirstName,
LastName = e.LastName
};
3、条件形式:生成SQL语句为:case when condition then else
var q =
from p in db.Products
select new
{

p.ProductName,
Availability =
p.UnitsInStock - p.UnitsOnOrder < 0 ? “Out Of Stock” : “In Stock”
};
4、shaped形式(异型类型) 其select操作使用了匿名对象,而这个匿名对象中,其属性也是个匿名对象
var q =
from c in db.Customers
select new {

c.CustomerID,
CompanyInfo = new {

c.CompanyName,
c.City, c.Country
},
ContactInfo = new {

c.ContactName,
c.ContactTitle
}
};
5、嵌套类型形式 返回的对象集中的每个对象DiscountedProducts属性中,又包含一个集合。也就是每个对象也是一个集合类。
var q =
from o in db.Orders
select new {

o.OrderID,
DiscountedProducts =
from od in o.OrderDetails
where od.Discount > 0.0
select od,
FreeShippingDiscount = o.Freight
};
6、Distinct形式:筛选字段中不相同的值。用于查询不重复的结果集。生成SQL语句为:SELECT DISTINCT [City] FROM [Customers]
这个是立即执行的,以上都是延后加载的,
var q = (
from c in db.Customers
select c.City )
.Distinct();

syntax Method :

Count/Sum/Min/Max/Avg
Count:返回集合中的元素个数,返回INT类型;不延迟。生成SQL语句为:SELECT COUNT(*) FROM
var q = db.Customers.Count();//1.简单形式:
var q = db.Products.Count(p => !p.Discontinued);//2.带条件形式:
Sum:返回集合中数值类型元素之和,集合应为INT类型集合;不延迟。生成SQL语句为:SELECT SUM(…) FROM
var q = db.Orders.Select(o => o.Freight).Sum();//1.简单形式
var q = db.Products.Sum(p => p.UnitsOnOrder);//2.映射形式:

.NET LINQ 通常分 Syntax Query 和Syntax Method
.NET LINQ 通常分 Syntax Query 和Syntax Method
.NET LINQ 通常分 Syntax Query 和Syntax Method

一般都是可视化创建EDM模型的,
.NET LINQ 通常分 Syntax Query 和Syntax Method
二、手动创建 EDM 手动建立实体类

在项目中添加一个类GuestInfoEntity.cs,如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq.Mapping;
namespace DataContexDemo
{

///
/// 手动建立实体类
///
[Table(Name=“tb_GuestInfo”)]
class GuestInfoEntity {

[Column(IsPrimaryKey=true,DbType=“Int NOT NULL IDENTITY”,IsDbGenerated=true,Name=“Id”)]
public int ID { get; set; }
[Column(DbType = “nvarchar(20)”, Name = “Name”)]
public string Name{get;set;}
[Column(DbType = “int”, Name = “Age”)]
public int Age { get; set; }
[Column(DbType = “nvarchar(20)”, Name = “Tel”)]
public string Tel { get; set; }
}
}
编写示例代码,注意需要引入System.Data.Linq.dll:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;/
namespace DataContexDemo
{

class Program {

static void Main(string[] args) {

//2.手动建立实体类
//
//连接字符串
string constring = @“Data Source=.\SQLEXPRESS;AttachDbFilename=E:\Visual Studio 2010\LINQ_to_SQL\LINQ_To_SQL自定义
nce=True”;
DataContext dc = new DataContext(constring); Table tb = dc.GetTable(); var query = tb.AsEnumerable();
foreach (var q in query) {

Console.WriteLine(“{0} {1} {2} {3}”,q.ID,q.Name,q.Age,q.Tel );
}
Console.ReadKey();
}
}
}

3、使用XML映射文件建立实体类
实体类的映射除了使用内联Attribute外,还可以建立一个包含映射信息的XML文件,此文件生成System.Data.Linq.Mapping.XmlMappingSource对象,作为DataContext
这个XML文件只有一个根节点—Database元素,用来映射的数据库信息。Database元素包含一个或多个Table元素,用于映射数据库表的信息,Table元素由一个Type mn元素用来指定列信息,Association元素用来映射数据库关系。 在项目中添加一个XML文件,采用默认名称XMLFile1.xml,内容如下:

<?xml version="1.0" encoding="utf-8" ?>

这个XML文件包含类全部的映射信息,下面建立映射的类GuestInfoEntity.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LINQtoSQL建立实体类_XML
{

public class GuestInfoEntity {

public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Tel { get; set; }
}
}
编写示例代码,同样需要引入System.Data.Linq.dll:
using System;
using System.Collections.Generic;
using System.Linq; using System.Text;
using System.Data.Linq;
using System.Data.Linq.Mapping;
using System.IO;//
namespace LINQtoSQL建立实体类_XML {

class Program {

static void Main(string[] args) {

string constring = @“Data Source=.\SQLEXPRESS;AttachDbFilename=E:\Visual Studio 2010\LINQ_to_SQL\LINQ_To_SQL自定义 nce=True”;
XmlMappingSource map = XmlMappingSource.FromXml(File.ReadAllText(“XMLFile1.xml”)); DataContext dc = new DataContext(constring, map); Table tb = dc.GetTable(); var query = tb.AsEnumerable();
foreach (var g in query) {

Console.WriteLine(“{0} {1} {2} {3}”,g.ID,g.Name,g.Age,g.Tel );
}
Console.ReadKey();
}
}
}

w3cjava

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: