EF操作與Linq寫法記錄


項目總結:EF操作與Linq寫法記錄

1、EF引入

  新建一個MVC項目之后,要引用EF框架,可以按照以下步驟進行:

  1),在Models中添加項目

  2),選擇Entity Data Model,並重新填寫名字

  3),選擇代碼優先之后,選擇連接的數據庫以及表,之后便生成,此時模型里面的實體就相當於數據庫中的表了

 

2、Linq與一些lambda寫法

  1)、單表查詢:

using (var db = new DBModel())
{
    DepartmentList = (from n in db.output_Auth where n.badge == badge select n.department).Distinct().ToList<string>();
}
//from n(表別名) in table(表格) where n.id == id(條件) select n(查找該表所有),然后后面可以選擇篩選的條件,比如.Distinct()\FirstOrDefault()\Sum()等
//select 中想要查詢具體的某個字段,寫法為:select new {n.id, n.name, n.age}等,字段想賦予別名,寫法為:select new {anotherID = n.id, anotherName = n.name}

注:幾個本項目中常用的方法:
1、OrderByDescending(n => n.id); //降序排列
2、FirstOrDefault(); //獲取查詢結果的第一行
3、ToList(); //將查詢結果列表化
4、Distinct(); //將查詢結果單一化,類似於SQL中的 distinct
5、Sum(n => n.id); //結果總和

剩下的在此次項目中未用到,將來使用到再總結。

 

  2)、多表查詢:

var time1 = (from a in Table_A join b in Table_B on a.id equals b.id where a.id == id & b.time == timeselect new { a.time, a.data}).ToList();
//在這里和SQL的多表查詢語句寫法不太同,on后面的條件寫法為: a.x equals b.x

//補充1:無法直接在 Linq to SQL 的語句中將時間格式化,只能先查詢出來了,再在 Linq to Entity 中格式化時間
  即上面查詢語句 where b.time == time 中,b.time 不能寫成 b.time.ToString("yyyy-MM-dd") 之類的
  只能將查到的時間放在 time1 中,再對時間進行格式化,如下:
  var time2 = (from t in time1 where t.time.GetDataTimeFormats()[5].ToString() == nowDate select new{Data = t.data}).Sum(t => t.Data);
  GetDateTimeFormats()[5]時間格式:yyyy-MM-dd

//補充2:LinQ to SQL 中查詢的結果如果為0,則無法直接使用.Sum()求和,應該先將查詢的結果.ToList(),再進行第二步,在 LinQ to Entity 中進行求和。類似於上面的寫法,需要寫兩條語句。

 

  3)、插入與更新語句

using (var db = new DBModel())
{
   //插入之前先查找有沒有該數據
var data = (from tb in db.Table where tb.id == id select tb).FirstOrDefault();
   //如果沒有該數據,則執行插入語句
if (data == null) { var table = new Table();
table.name = name;
    table.age = age;
//執行插入操作 db.Table.Add(table);
    db.SaveChanges();
   }
   //如果當月有數據 else
    {
        //Linq無法直接更新主鍵的數據,只能是先將此條信息復制出來,把原來的那條數據刪除,再重新插入一條修改后的數據,若不是主鍵數據,則直接更新
        var tableNew = new Table();

        tableNew.name = name;
        tableNew.age = age;

        db.Table.Remove(data); //移除老數據
        db.Table.Add(tableNew); //添加新數據
        //執行更新操作
        db.SaveChanges();
    }
}      

//Lambda 表達式新增寫法 :

  var data = db.Table.FirstOrDefault(tb => tb.id == id & tb.name == name);
  if (data == null)
  {
    var table = new Table();

    table.name = name;

    table.age = age;

    db.Table.Add(table);
    db.SaveChanges();
  }

 //Lambda 修改:

  var table = db.Table.FirstOrDefault(tb => tb.id == id);
  table.name = name;
  table.age = age;
  db.SaveChanges();

 

  4)、刪除

//Lambda表達式寫法:
using (var db = new DBModel())
{
    var user = db.Table.FirstOrDefault(opAu => opAu.ID == userID);
    db.Table.Remove(user);
    db.SaveChanges();
}

//Linq寫法:
using (var db = new DBModel())
{
    var user = (from tb in db.Table select tb).FirstOrDefault();
    db.Table.Remove(tb);
    db.SaveChanges();
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM