SQL連接中加條件查詢的LINQ表達式寫法
為了提高開發效率,公司的的開發大量采用LINQ To SQL進行開發
在這里把項目中遇上的問題和大家分享一下。(即LINQ to sql 連接加條件查詢的問題)
問題描述:
表結構以及相關測試數據腳本如下:
create table MemberInfo
(
MemberID int,
MemberName nvarchar(50)
)
create table MemberSort
(
MemberId int,
SortNumber int,
MemberType int
)
insert into MemberInfo values (1,'A')
insert into MemberInfo values (2,'B')
insert into MemberInfo values (3,'C')
insert into MemberInfo values (4,'D')
insert into MemberInfo values (5,'E')
insert into MemberSort values (1,5,0)
insert into MemberSort values (2,4,0)
insert into MemberSort values (3,3,1)
--Drop table MemberInfo
--Drop table MemberSort
現在有這樣一個需求,就是需要顯示出所有的會員信息(即MemberInfo)的信息,但排序需按照會員排序表(MemberSort)中會員類型(MemberType)為0的SortNumber列進行排序。
聽起來有點繞哈,分解一下
1.需要顯示出所有的會員信息;
2.按照會員排序表中的SortNumber列進行排序;
3.只按照會員排序表中會員類型為0的會員進行排序;
內容清楚了,采用傳統SQL方式查詢,實現代碼為
SELECT [t0].[MemberID], [t0].[MemberName] |
我們也希望在LINQ TO sql當中獲取同樣的支持
即這樣表達
var data = from m in db.MemberInfo |
但很不幸報錯了。哎難道MS又開我們的玩笑,當時為了項目進度,有同事把其實現方式先換成了SQL方式實現。
后來幾經周折,終于找到了答案
var data = from m in db.MemberInfo |
關鍵語句即from cx in x.Where(d=>d.MemberType==0).DefaultEmpty();
即為返回連接組合當中MemberType==0或不存在MemberType值的數據集合。
問題解決了,希望可以讓朋友們少走彎路,遇到類似的問題可以很容易得到解決
【編輯推薦】