1、L2E查詢
L2E查詢時可以使用linq query語法,或者lambda表達式,默認返回的類型是IQueryable,(linq查詢默認返回的是IEnumerable),下邊給出了一個簡單的例子
//查詢名字為ls的用戶集合
//query語法
var users = from u in context.UserInfo
where u.UserName == "ls"
select u;
//method語法
var users2 = context.UserInfo.Where<UserInfo>(user => user.UserName == "ls");
linq的使用方法詳見linq總結系列(一)---基礎部分,其中的CRUD操作都是使用linq的語法,這里就不多啰嗦了~
2、原生Sql查詢和操作
1.DbSet.SqlQuery()
返回的結果是DbSqlQuery類型,該類型實現了IEnumberable接口,所以結果集也可以用linq操作
//查詢名字為ls,密碼是123321的用戶集
//使用占位符,執行的時候自動生成sql參數,不用擔心sql注入
var user1 = context.UserInfo.SqlQuery("select * from userinfo where username=@p0 and userpass=@p1", "ls", "123");
//自己設sql參數
SqlParameter [] pars= {
new SqlParameter("@name", SqlDbType.NVarChar, 20) { Value = "ls" },
new SqlParameter("@pass", SqlDbType.NVarChar, 20) { Value="123"}
};
var user2 = context.Database.SqlQuery<UserInfo>( "select * from userinfo where username=@name and userpass=@pass", pars);
//查詢用戶人數
int count = context.Database.SqlQuery<int>("select count(*) from userinfo").SingleOrDefault();
2.Database.SqlQuery()
context.Database對應着底層數據庫,Database.SqlQuery用於查詢,可以返回任意類型。
using (var ctx = new SchoolDBEntities())
{
//獲取ID為1的student的名字
string studentName = ctx.Database.SqlQuery<string>("Select studentname from Student where studentid=@id", new SqlParameter("@id", 1))
.FirstOrDefault();
}
3.Database.ExecuteSqlCommand()
Database.ExecuteSqlCommand()用於通過Sql進行CUD操作,返回int類型(受影響的行數)
using (var ctx = new SchoolDBEntities())
{
//修改
int noOfRowUpdated = ctx.Database.ExecuteSqlCommand("Update student set studentname ='changed student by command' where studentid=@id", new SqlParameter("@id", 1));
//添加
int noOfRowInserted = ctx.Database.ExecuteSqlCommand("insert into student(studentname) values('New Student')");
//刪除
int noOfRowDeleted = ctx.Database.ExecuteSqlCommand("delete from student where studentid=@id",new SqlParameter("@id", 1));
}

