C# LINQ和Lambda表達(dá)式詳解


(1) 簡(jiǎn)單的查詢語(yǔ)句

1 Linq語(yǔ)法:

2? var data=from a in db.Areas select a ;

3 Lamda語(yǔ)法:

4? var data=db.Areas;

5 sql語(yǔ)法:

6? string sqlStr=" SELECT * FROM Areas? ";

(2) 簡(jiǎn)單的WHERE語(yǔ)句

1 Linq語(yǔ)法:

2? var data=from a in db.orderInfo where a.orderId > 20 select a ;

3 Lamda語(yǔ)法:

4? var data=db.orderInfo.Where( t=>t.orderId > 20 ) ;

5 sql語(yǔ)法:

6? string sqlStr=" SELECT * FROM orderInfo WHERE orderId > 20 ";

(3) 關(guān)于“COUNT恩袱、SUM、MIN、MAX”函數(shù)的語(yǔ)句

1 Linq語(yǔ)法:

2? var data=( from a in db.orderInfo select a ).Max( p=>p.orderId ) ;//查詢?cè)摫碇凶畲缶幪?hào)Id

3? var data=( from a in db.orderInfo select a ).Min( p=>p.orderId ) ;//查詢?cè)摫碇凶钚【幪?hào)Id

4? var data=( from a in db.orderInfo select a ).Count() ;//查詢?cè)摫頂?shù)據(jù)總條數(shù)

5? var data=( from a in db.orderInfo select a ).Sum( p=>p.orderMoney ) ;//查詢?cè)摫碇兴邢M(fèi)額的總數(shù)(求和)

6 Lamda語(yǔ)法:

7? var data=db.orderInfo.Max( t=>t.orderId );//查詢?cè)摫碇凶畲缶幪?hào)Id

8? var data=db.orderInfo.Min( t=>t.orderId );//查詢?cè)摫碇凶钚【幪?hào)Id

9? var data=db.orderInfo.Count();//查詢?cè)摫頂?shù)據(jù)總條數(shù)

10? var data=db.orderInfo.Sum( t=>t.orderMoney );//查詢?cè)摫碇兴邢M(fèi)額的總數(shù)(求和)

11 sql語(yǔ)法:

12? string sqlStr=" SELECT MAX(orderId) FROM orderInfo ";

13? string sqlStr=" SELECT MIN(orderId) FROM orderInfo ";

14? string sqlStr=" SELECT COUNT(*) FROM orderInfo ";

15? string sqlStr=" SELECT SUM(orderMoney ) FROM orderInfo ";

(4) 關(guān)于數(shù)據(jù)排序的語(yǔ)句

1 Linq語(yǔ)法:

2? var data=from a in db.orderInfo where a.orderId > 20 orderby a.orderId descending select a ;//倒序排序,升序可用ascending關(guān)鍵字

3 Lamda語(yǔ)法:

4? //情況一肥卡,根據(jù)單字段排序:

5? var data=db.orderInfo.OrderByDescending( t=>t.orderId ).Where( t=>t.orderId > 20 ) .ToList();//倒序排序庞钢,升序可用OrderBy關(guān)鍵字

6? //情況二,根據(jù)多字段主次排序:

7? var priceMonthEntities = priceMonthApp.GetList().OrderBy(t => t.F_Year).ThenBy(t => t.F_Month).ToList();//先按年升序抑片,再按月升序

8 sql語(yǔ)法:

9? string sqlStr=" SELECT * FROM orderInfo WHERE orderId > 20 ORDER BY orderId DESC? ";//倒序排序睹栖,升序可用ASC關(guān)鍵字

(5) 關(guān)于分頁(yè)查詢的語(yǔ)句

1 Linq語(yǔ)法:

2? var data=( from a in db.orderInfo select a ) .Skip((pageIndex-1) * pageSize).Take(pageSize).ToList();

3 Lamda語(yǔ)法:

4? var data=db.orderInfo.Skip((pageIndex-1)* pageSize).Take(pageSize).ToList();;//pageIndex:當(dāng)前頁(yè)碼硫惕,pageSize:分頁(yè)數(shù)據(jù)顯示條數(shù)

5 sql語(yǔ)法:

6? string sqlStr="SELECT TOP pageSize * FROM orderInfo WHERE orderId NOT IN(SELECT TOP( ( pageIndex - 1) * pageSize) orderId FROM orderInfo)";

(6) 關(guān)于模糊查詢(like)的語(yǔ)句

1 Linq語(yǔ)法:

2? var data= from a in db.orderInfo where a.orderId.Contains(1) select a;//使用Contains關(guān)鍵字進(jìn)行模糊匹配

3 Lamda語(yǔ)法:

4? var data=db.orderInfo.Where(t=>t.F_UserId.Contains("1")).ToList();//使用Contains關(guān)鍵字進(jìn)行模糊匹配

5 sql語(yǔ)法:

6? string sqlStr="SELECT * FROM orderInfo WHERE orderId LIKE '%12%'";//使用like關(guān)鍵字進(jìn)行模糊匹配

(7) 關(guān)于分組查詢的語(yǔ)句

1 Linq語(yǔ)法:

2? var data= from a in db.orderInfo orderby a.orderId descending

3? ? ? ? ? ? group a by a.orderType into s select new{

4? ? ? ? ? ? s.key,//分組字段

5? ? ? ? ? ? s.sMoney=s.Sum(a=>a.orderMoney),//分組后算出總的消費(fèi)額

6? ? ? ? ? ? s.maMoney=s.Max(a=>a.orderMoney),//分組后算出最大的消費(fèi)額

7? ? ? ? ? ? s.miMoney=s.Min(a=>a.orderMoney)//分組后算出最小的消費(fèi)額

8? ? ? ? ? ? };

9 Lamda語(yǔ)法:

10? //使用GroupBy關(guān)鍵字進(jìn)行分組查詢(單個(gè)字段)

11? var data=db.orderInfo.GroupBy(p => p.recType).Select(t=>t.Key).ToList();

12? //使用GroupBy關(guān)鍵字進(jìn)行分組查詢(多個(gè)字段)

13? var data=db.orderInfo.GroupBy(p =>new{ p.recType,p.orderId}).Select(t=>new{ recType=t.Key.recType,orderId=t.Key.orderId}).ToList();

14 sql語(yǔ)法:

15? string sqlStr="SELECT orderType , SUM(orderMoney), MAX(orderMoney), MIN(orderMoney) FROM orderInfo GROUP BY orderType";

(8) 關(guān)于多表關(guān)聯(lián)查詢的語(yǔ)句

1 Linq語(yǔ)法:

2? //使用join關(guān)鍵字進(jìn)行表連接

3? var data= from a in db.orderInfo join e in? db.orderType on a.orderTypeId equals e.id select r ;

4? var query=from t in db.orderInfo join s in db.orderType on t.orderTypeId equals s.id select

5? new {

6? ? ? ? orderId=t.id,

7? ? ? ? orderTypeName=s.name,

8? ? ? ? ...

9? }

10 Lamda語(yǔ)法:

11? var data=db.orderInfo.Join(db.orderType,t=>t.orderTypeId,s=>s.id,(t,s)=>t).OrderByDescending(t=>t.orderId).

12? Select(

13? ? ? ? ? ? t=> new{

14? ? ? ? ? ? ? orderId=t.t.id,

15? ? ? ? ? ? ? orderTypeName=t.s.name,

16? ? ? ? ? ? ? ...

17? ? ? ? ? }).ToList(); //使用Join關(guān)鍵字進(jìn)行表連接

18 EF Core中的寫法:

19? var data=db.orderInfo.Join(db.orderType,t=>t.orderTypeId,s=>s.id,(t,s)=>new{

20? orderId=s.Id,

21? .....

22? }).toList();

23 sql語(yǔ)法:(sql語(yǔ)句表關(guān)聯(lián)有多種方法,在此只舉一例)

24? string sqlStr="SELECT * FROM orderInfo o ,orderType t WHERE o.orderTypeId=t.id ORDER BY t.createDate";

(9) 關(guān)于in查詢的語(yǔ)句

1 Linq語(yǔ)法:

2? var data= from a in db.orderInfo where (new int?[2213,43311,32422]).Contains(a.orderId) select a ;

3 Lamda語(yǔ)法:

4? var data=db.orderInfo.Where(t=>(new int?[2213,43311,32422]).Contains(t.orderId)).ToList();

5 sql語(yǔ)法:

6? string sqlStr="SELECT * FROM orderInfo WHERE orderId IN (2213,43311,32422)";

(10) 關(guān)于去重查詢的語(yǔ)句

1 Linq語(yǔ)法:

2? var data= from a in db.orderInfo group p by new {a.orderTypeId} into _group select _group.FirstOrDefault(); //使用group關(guān)鍵字進(jìn)行表數(shù)據(jù)去重

3? var data= from a in db.orderInfo group p by new {a.orderTypeId,...} into _group select _group.FirstOrDefault(); //使用group關(guān)鍵字對(duì)多個(gè)字段進(jìn)行表數(shù)據(jù)去重

4 Lamda語(yǔ)法:

5? //單個(gè)去重:

6? var data=db.orderInfo.GroupBy(t=>t.orderTypeId).Select(r => r.First()).ToList(); //使用GroupBy關(guān)鍵字進(jìn)行表數(shù)據(jù)去重

7? var data=db.orderInfo.DistinctBy(t=>t.orderTypeId).ToList(); //使用DistinctBy關(guān)鍵字進(jìn)行表數(shù)據(jù)去重

8? //多個(gè)字段去重:

9? var data=db.orderInfo.GroupBy(t=>new{t.orderTypeId,...}).Select(r => r.First()).ToList(); //使用GroupBy關(guān)鍵字對(duì)多個(gè)字段進(jìn)行表數(shù)據(jù)去重

10? var data=db.orderInfo.DistinctBy(t=>new{t.orderTypeId,...}).ToList(); //使用DistinctBy關(guān)鍵字對(duì)多個(gè)字段進(jìn)行表數(shù)據(jù)去重

11 sql語(yǔ)法:

12? string sqlStr="SELECT DISTINCT orderTypeId? FROM orderInfo";//使用DISTINCT關(guān)鍵字進(jìn)行表數(shù)據(jù)去重

13? string sqlStr="SELECT orderTypeId FROM orderInfo GROUP BY orderTypeId";//使用GROUP BY關(guān)鍵字進(jìn)行表數(shù)據(jù)去重

(11) 內(nèi)連接 INNER JOIN

1 Linq語(yǔ)法:

2 var ss = from r in db.Am_recProScheme

3? ? ? ? ? join w in db.Am_Test_Result on r.rpId equals w.rsId

4? ? ? ? ? orderby r.rpId descending

5? ? ? ? ? select r;

6 Lamda語(yǔ)法:

7 var ss1 = db.Am_recProScheme.Join(db.Am_Test_Result, p => p.rpId, r => r.rsId, (p, r) => p).OrderByDescending(p => p.rpId).ToList();

8 sql語(yǔ)法:

9 string sssql = "SELECT r.* FROM Am_recProScheme AS r INNER JOIN Am_Test_Result AS t ON r.[rpId] = t.[rsId] ORDER BY r.[rpId] DESC";

(12) 左連接 LEFT JOIN

1 //兩個(gè)DataTable關(guān)聯(lián)野来,查找只在第一個(gè)表中的數(shù)據(jù)

2 static void Main(string[] args)

3 {

4? ? DataTable dt1 = new DataTable("Ta");

5? ? DataTable dt2 = new DataTable("Tb");

6? ? dt1.Columns.Add("ID", typeof(int));

7? ? dt1.Columns.Add("Name", typeof(string));

8? ? dt1.Rows.Add(1, "小明");

9? ? dt1.Rows.Add(2, "小紅");

10? ? dt1.Rows.Add(3, "小黑");

11? ? dt2.Columns.Add("ID", typeof(int));

12? ? dt2.Columns.Add("Name", typeof(string));

13? ? dt2.Rows.Add(1, "小黃");

14? ? dt2.Rows.Add(2, "小紅");

15? ? dt2.Rows.Add(3, "小強(qiáng)");

16? ? 方法一:Linq語(yǔ)法

17? ? var query = from q1 in dt1.AsEnumerable()

18? ? ? ? ? ? ? ? join q2 in dt2.AsEnumerable()

19? ? ? ? ? ? ? ? on q1.Field<string>("Name") equals q2.Field<string>("Name") into tmp

20? ? ? ? ? ? ? ? from q3 in tmp.DefaultIfEmpty()

21? ? ? ? ? ? ? ? where q3 == null

22? ? ? ? ? ? ? ? select new

23? ? ? ? ? ? ? ? {

24? ? ? ? ? ? ? ? ? ? ID = q1.Field<int>("ID"),

25? ? ? ? ? ? ? ? ? ? Name = q1.Field<string>("Name")

26? ? ? ? ? ? ? ? };

27? ? 方法二:Lamda語(yǔ)法

28? ? var query = dt1.AsEnumerable().GroupJoin(

29? ? ? ? dt2.AsEnumerable(),

30? ? ? ? x => x.Field<string>("Name"),

31? ? ? ? y => y.Field<string>("Name"),

32? ? ? ? (x, y) => y.DefaultIfEmpty(). Where(w => w == null).

33? ? ? ? Select(z => new { ID = x.Field<int>("ID"), Name = x.Field<string>("Name") })

34? ? ? ? ).SelectMany(x => x);

35? ? foreach (var item in query)

36? ? {

37? ? ? ? Console.WriteLine($"ID={item.ID}? ? Name={item.Name}");

38? ? }

39? ? Console.Read();

40 }

(13) 三表連接

1 SELECT id, name, jname, cname?

2? ? ? ? FROM userinfo u?

3? ? ? ? LEFT JOIN job j on u.job = j.jid?

4? ? ? ? LEFT JOIN city c on u.city = c.cid?

5

6 var list = (?

7? ? from u in dc.userinfos?

8? ? ? ? join j in dc.jobs on u.job equals j.jid into j_join?

9? ? from x in j_join.DefaultIfEmpty()?

10? ? ? ? join c in dc.cities on u.city equals c.cid into c_join?

11? ? from v in c_join.DefaultIfEmpty()?

12? ? select new?

13? ? {?

14? ? ? ? id = u.id,?

15? ? ? ? name = u.name,?

16? ? ? ? jname = x.jname,?

17? ? ? ? cname = v.cname,?

18? ? ? ? /*u1=u,x1=x,v1=v*/?

19? ? ? ? //不要用對(duì)象的方式 因?yàn)閷?duì)象可能為null那么對(duì)象.屬性就會(huì)拋異常?

20? ? }?

21? ? ).ToList();?

22? ? ?

23? ? for (var i = 0; i < list.Count(); i++)?

24? ? {?

25? ? ? ? Console.WriteLine(list[i].name + '\t' + list[i].jname + '\t' + list[i].cname); //字段為null不報(bào)異常?

26? ? ? ? //Console.WriteLine(list[i].u1.name+'\t'+list[i].x1.jname+'\t'+list[i].v1.cname+"\r\n"); //對(duì)象x1 v1 有可能為null 拋異常?

27? ? }?

28? ? Console.ReadLine();

(14) 實(shí)例用法:

1 //數(shù)據(jù)庫(kù) + 自定義名稱 =new 數(shù)據(jù)庫(kù)

2 mydbDataContext con = new mydbDataContext();

3 //模糊查詢表達(dá)式中用.Contains

4 con.car.Where(r=>r.name.Contains(TextBox1.Text.Trim())).ToList();

5 //開頭查用.StartWith

6 con.car.Where(r => r.name.StartsWith(TextBox1.Text)).ToList();

7 //結(jié)尾查用.EndWith

8 con.car.Where(r => r.name.EndsWith(TextBox1.Text)).ToList();

9 //最大值

10 con.car.Max(r => r.price * r.oil).ToString();

11 //最小值

12 con.car.Min(r => r.price).ToString();

13 //求和

14 con.car.Sum(r => r.price).ToString();

15 //平均值

16 con.car.Average(r => r.price).ToString();

17 //升序:

18 con.car.OrderBy(r => r.price).ToList();

19 //降序:

20 con.car.OrderByDescending(r => r.price).ToList();

21

22 //上一頁(yè)恼除,下一頁(yè),組合查詢:

23 int PageCount = 5;//每頁(yè)顯示條數(shù)

24 //上一頁(yè)梁只,PageCount_Label.Text為當(dāng)前頁(yè)碼

25 int pageNum = Convert.ToInt32(PageCount_Label.Text) - 1;

26 Repeater1.DataSource = con.car.Skip((pageNum - 1) * PageCount).Take(PageCount);

27 Repeater1.DataBind();

28 PageCount_Label.Text = pageNum.ToString();

29 //下一頁(yè)

30 int pageNum = Convert.ToInt32(PageCount_Label.Text) + 1;

31 Repeater1.DataSource = con.car.Skip((pageNum - 1) * PageCount).Take(PageCount);

32 Repeater1.DataBind();

33 PageCount_Label.Text = pageNum.ToString();

34 //組合查詢的點(diǎn)擊事件

35 List<car> list = con.car.ToList();

36 if (TextBox2.Text != "")

37 {

38? ? List<car> list1 = con.car.Where(r => r.name.Contains(TextBox2.Text)).ToList();

39? ? list = list.Intersect(list1).ToList();

40 }

41 if (TextBox3.Text != "")

42 {

43? ? List<car> list1 = con.car.Where(r => r.oil == Convert.ToDecimal(TextBox3.Text)).ToList();

44? ? list = list.Intersect(list1).ToList();

45 }

46 if (TextBox4.Text != "")

47 {

48? ? List<car> list1 = con.car.Where(r => r.powers == Convert.ToInt32(TextBox4.Text)).ToList();

49? ? list = list.Intersect(list1).ToList();

50 }

51 Repeater1.DataSource = list;

52 Repeater1.DataBind();

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缚柳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子搪锣,更是在濱河造成了極大的恐慌秋忙,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件构舟,死亡現(xiàn)場(chǎng)離奇詭異灰追,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)狗超,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門弹澎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人努咐,你說我怎么就攤上這事苦蒿。” “怎么了渗稍?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵佩迟,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我竿屹,道長(zhǎng)报强,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任拱燃,我火速辦了婚禮秉溉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘碗誉。我一直安慰自己召嘶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布哮缺。 她就那樣靜靜地躺著苍蔬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蝴蜓。 梳的紋絲不亂的頭發(fā)上碟绑,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音茎匠,去河邊找鬼格仲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛诵冒,可吹牛的內(nèi)容都是我干的凯肋。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼汽馋,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼侮东!你這毒婦竟也來了圈盔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤悄雅,失蹤者是張志新(化名)和其女友劉穎驱敲,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宽闲,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡众眨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了容诬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娩梨。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖览徒,靈堂內(nèi)的尸體忽然破棺而出狈定,到底是詐尸還是另有隱情,我是刑警寧澤习蓬,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布掸冤,位于F島的核電站,受9級(jí)特大地震影響友雳,放射性物質(zhì)發(fā)生泄漏稿湿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一押赊、第九天 我趴在偏房一處隱蔽的房頂上張望饺藤。 院中可真熱鬧,春花似錦流礁、人聲如沸涕俗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)再姑。三九已至,卻和暖如春找御,著一層夾襖步出監(jiān)牢的瞬間元镀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工霎桅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留栖疑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓滔驶,卻偏偏與公主長(zhǎng)得像遇革,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容