iT邦幫忙

0

請問有System.Linq的一個公式用法嗎

  • 分享至 

  • xImage

剛開始在學時以為Linq是sql的倒裝句,但後來看別人寫的程式裏,有的可以在後面.linq的方法,但真的不知道怎麼用沒有一個標準,像SQL標準語法,你知道Select後面要接什麼Where後面要接什麼,但Linq你真的不知道他要什麼時候出現你要怎麼用他,都是看別人寫好的範例,然後大概知道一二,但要自已用確腦子一片空白,微軟弄的很多功能,但不知道怎麼在多功能也只是沒人知道,知道了又發現雜亂無章,抽象難懂,以numQuery1=後來看很簡單,但這種就像是sql真正在執行的順序,看得懂也很簡單,是因為學過sql也用的很熟也查過sql原來有一個真正執行順序,語法只是要讓人更容易上手所以用接近人的語法下,但linq真的滿怪而且不是只有在numQuery1=後面這個還有一堆怪用法,但都沒有一個標準的可以學習的地方,語法總有一個標準,但我實在看不出linq的標準在那,只能拿別人寫好的範例來貼,運氣好試用就能用,運氣不好就完全想不出來要怎麼解決, 簡單說SQL就在那裏,我知道怎麼下,linq到底在那裏,完全不知怎麼下

var result = from d in _db.DepartmentTable2s
join u in _db.UserTable2s on d.DepartmentId equals u.DepartmentId
orderby d.DepartmentId
select new { d.DepartmentId, d.DepartmentName, u.UserId, u.UserName };

int[] numbers = { 5, 10, 8, 3, 6, 12 };
//1.Query syntax寫法1
var numQuery1 = from num in numbers
where num % 2 == 0
orderby num
select num;

//2.Method syntax寫法2
var numQuery2 = numbers.Where(x => x % 2 == 0).OrderBy(x => x);

_x.x1 = DapperHelper.QuerySetSql(sql).ToList();

看更多先前的討論...收起先前的討論...
我看不懂你要表達什麼。。。
w4560000 iT邦研究生 5 級 ‧ 2021-12-16 11:37:44 檢舉
那你也可以用dapper 直接下T-SQL語法,也不一定要用LINQ XD
Jason iT邦新手 4 級 ‧ 2021-12-16 11:56:28 檢舉
有,大部份都是用你說的dapper 直接下T-SQL語法
我不太愛用Linq語法,太繞口了,尤其是遇到join時,還要 into new,真的不好變通,建議你改用Lambda

data.Where(p=>p.name = "abc");

簡潔多了
Jason iT邦新手 4 級 ‧ 2021-12-16 13:16:19 檢舉
謝謝,但我覺得Lambda 更抽象更看不懂,linq與Lambda 是裏面最難懂
fillano iT邦超人 1 級 ‧ 2021-12-16 14:35:32 檢舉
很多查詢條件,不一定會在下SQL的當下知道。Linq這樣設計是為了解耦程式邏輯與SQL,讓你的查詢跟程式的搭配更順暢,到真正需要執行的時候,才產出sql來做查詢。(在View render的時候,上面的資料才需要顯示,所以查詢發生比你想的晚很多)當然你也可以不認同他的設計理念,我也只是從sql builder的角度來理解的。
Jason iT邦新手 4 級 ‧ 2021-12-16 16:22:38 檢舉
其實這個我也知道,有問過別人,和你說的一樣,但我不會用,他在好也沒有用,就像說到真正需要執行的時候,才產出sql來做查詢,還是先會用,就算會用其實他是不是真的如此我也無從測試
fillano iT邦超人 1 級 ‧ 2021-12-16 18:13:34 檢舉
用不用都是因應自己開發上的需求啦,不需要勉強的XD
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
YoChen
iT邦研究生 1 級 ‧ 2021-12-16 19:08:18
最佳解答

其實我覺得官網的介紹就寫得滿清楚的了~XDDD
不過我還是試看看能不能再把它簡化一點,
當然,如有任何錯誤也請各位先進指教~/images/emoticon/emoticon07.gif

先講講Query Syntax
其實LINQ做的不外乎就是查資料這件事,
查資料這件事,我們簡單分成目標目標集合資料資料集合四個部分,
註:目標可能是資料本身,也可能是資料的一部分

如果您對SQL有一點了解的話,
那您一定看得懂

select 目標
from 資料集合
where 資料 符合條件

// 執行過後就會得到 目標集合

再來您必須知道的是,
LINQ是透過foreach的概念來實作的,
套用剛剛的四個部分,
那它實作起來大概就會變成

// LINQ Method

foreach(var 資料 in 資料集合)
{
    if(資料 符合條件)
    {
        yield return 目標
    }
}

然後我們簡化一下上面的東西,
再比對一下範例,
應該就會比較有感覺了~XDDD

var 目標集合 = from 資料 in 資料集合
              where 資料 符合條件
              select 目標


var numQuery1 = from num in numbers
                where num % 2 == 0
                select num;

// orderby先拿掉,怕混淆

至於Method Syntax
首先您必須對Lambda 運算式有一點基本概念才行,
再來其實就大同小異了,
只是把Query Syntax各個部分抽出來而已,
以您的例子來說就是

var numQuery2 = numbers.Where(x => x % 2 == 0)
// 一樣orderby先拿掉,怕混淆

var 目標集合 = 資料集合.Where(資料 => 資料 符合條件)
// 像這邊會使用Where,主要就是因為 目標 跟 資料 型別相同,所以就不用像Query Syntax一樣還特別把Select寫出來
Jason iT邦新手 4 級 ‧ 2021-12-17 09:40:03 檢舉

非常感謝您,只能說您是大師,學問真強也能教的出來,整理的有條有理

2
天黑
iT邦研究生 5 級 ‧ 2021-12-16 16:55:40

可以看看高手的文章,介紹很多
相關連結 : https://ithelp.ithome.com.tw/users/20107789/ironman/1574

Jason iT邦新手 4 級 ‧ 2021-12-17 08:58:06 檢舉

感謝,很有幫助,慢慢來看

我要發表回答

立即登入回答