efcore-1.png
- 模糊查詢
sql
SELECT * from A
WHERE A.字段x like '%條件內(nèi)容x%'
linq
var list = (from a in context.A
where a.字段x.Contains("條件內(nèi)容x")
select new
{
a.字段
}).AsNoTracking().ToList();
- 內(nèi)連接查詢
sql
SELECT * from A
inner JOIN B
ON A.字段1 = B.字段1
WHERE A.字段x = '條件內(nèi)容x'
and B.字段x = '條件內(nèi)容x'
linq
var list = (from a in context.A
join b in context.B
on a.字段1 equals b.字段1
where a.字段x == "條件內(nèi)容x"
&& b.字段x == "條件內(nèi)容x"
select new
{
a.字段,
b.字段
}).AsNoTracking().ToList();
- 左連接查詢
sql
SELECT * from A
left JOIN B
ON A.字段1 = B.字段1
WHERE A.字段x = '條件內(nèi)容x'
linq
var list = (from a in context.A
join b in context.B
on a.字段1 equals b.字段1 into ab
from abl in ab.DefaultIfEmpty()
where a.字段x == "條件內(nèi)容x"
select new
{
a.字段,
b.字段
}).AsNoTracking().ToList();
- 左連接查詢(連接內(nèi)帶條件)
sql
SELECT * from A
left JOIN B
ON A.字段1 = B.字段1
and A.字段2 = '條件內(nèi)容1'
and A.字段3 = '條件內(nèi)容2'
WHERE A.字段x = '條件內(nèi)容x'
linq
var list = (from a in context.A
join b in context.B
on a.字段1 equals b.字段1
.Where(b1=>b1.字段2 == "條件內(nèi)容2" && b1.字段3 == "條件內(nèi)容3")
into ab
from abl in ab.DefaultIfEmpty()
where a.字段x == "條件內(nèi)容x"
select new
{
a.字段,
b.字段
}).AsNoTracking().ToList();
- 遞歸查詢
表結(jié)構(gòu)
ID PID XXX
1 1 大哥
2 1 二哥
3 2 三弟
pid和id是同一張表中的主外鍵關(guān)系俄周,常見的一種的上下級表結(jié)構(gòu)設(shè)計彬伦,如果需要再linq里面進行查詢id為1的所有子級列表就需要用到關(guān)鍵詞SelectMany
/// <summary>
/// 向下遞歸獲取子級ID
/// </summary>
/// <param name="pId"></param>
/// <returns></returns>
private List<uint> GetSonId(uint pId)
{
using (var context = new DBContext())
{
var ps = (from p in context.表名
select new
{
p.id,
p.pid
}).AsNoTracking().ToList();
if (ps.Any())
{
var query = (from c in 表名
where c.pid == pId
select c.id).ToList();
return query.Concat(query.SelectMany(GetSonId)).ToList();
}
else
{
return new List<uint>();
}
}
}
- 獲取EF SaveChanges前未提交到數(shù)據(jù)庫中的數(shù)據(jù)
此處的適用場景為批量添加存在主外鍵關(guān)聯(lián)的數(shù)據(jù)讲逛,過程中需要判斷外鍵數(shù)據(jù)是否已經(jīng)存在雷客,如果每條數(shù)據(jù)每次都saveChanges到數(shù)據(jù)庫拴曲,然后再從數(shù)據(jù)庫中去查詢外鍵數(shù)據(jù)是否存在侧蘸,將耗費很長的時間彬碱,在本地將Add過的外鍵數(shù)據(jù)取出枕屉,直接在本地判斷將極大的提高程序的效率乐纸。
using (var context = new DBContext())
{
var localList = context.Entity.Local;
}