自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL連接中加條件查詢的LINQ表達式寫法

運維 數(shù)據(jù)庫運維
本文通過實例,講述了SQL連接中加條件查詢的LINQ表達式寫法,以提高開發(fā)效率。

為了提高開發(fā)效率,公司的的開發(fā)大量采用LINQ To SQL進行開發(fā)

在這里把項目中遇上的問題和大家分享一下。(即LINQ to sql 連接加條件查詢的問題)

問題描述:

表結(jié)構(gòu)以及相關(guān)測試數(shù)據(jù)腳本如下:

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

 

現(xiàn)在有這樣一個需求,就是需要顯示出所有的會員信息(即MemberInfo)的信息,但排序需按照會員排序表(MemberSort)中會員類型(MemberType)為0的SortNumber列進行排序。

聽起來有點繞哈,分解一下

1.需要顯示出所有的會員信息;

2.按照會員排序表中的SortNumber列進行排序;

3.只按照會員排序表中會員類型為0的會員進行排序;

內(nèi)容清楚了,采用傳統(tǒng)SQL方式查詢,實現(xiàn)代碼為

SELECT [t0].[MemberID], [t0].[MemberName]
FROM [dbo].[MemberInfo] AS [t0]
LEFT OUTER JOIN [dbo].[MemberSort] AS [t1] ON ([t1].[MemberType] =0) AND
([t0].[MemberID] = [t1].[MemberID])
ORDER BY
    (CASE
        WHEN [t1].[SortNumber] IS NOT NULL THEN [t1].[SortNumber]
        ELSE 9999
     END)

我們也希望在LINQ TO sql當(dāng)中獲取同樣的支持

即這樣表達

var data = from m in db.MemberInfo
    join s in db.MemberSort on m.MemberID equals s.MemberID &&
    s.MemberType == 0
    into x
    from cx in x.DefaultIfEmpty()
    orderby cx.SortNumber.HasValue ? cx.SortNumber.Value : 9999
    select m;

但很不幸報錯了。哎難道MS又開我們的玩笑,當(dāng)時為了項目進度,有同事把其實現(xiàn)方式先換成了SQL方式實現(xiàn)。

后來幾經(jīng)周折,終于找到了答案

var data = from m in db.MemberInfo
    join s in db.MemberSort on m.MemberID equals s.MemberID
    into x
    from cx in x.Where(d => d.MemberType == 0).DefaultIfEmpty()
    orderby cx.SortNumber.HasValue ? cx.SortNumber.Value : 9999
    select m;

關(guān)鍵語句即from cx in x.Where(d=>d.MemberType==0).DefaultEmpty();

即為返回連接組合當(dāng)中MemberType==0或不存在MemberType值的數(shù)據(jù)集合。

問題解決了,希望可以讓朋友們少走彎路,遇到類似的問題可以很容易得到解決

【編輯推薦】

  1. 有效使用SQL Server的自動管理功能
  2. 將SQL 2000日志遷移到SQL Server 2008
  3. 升級SQL Server 2008數(shù)據(jù)庫引擎
責(zé)任編輯:book05 來源: 博客園
相關(guān)推薦

2009-09-10 15:35:07

LINQ查詢表達式

2011-10-28 16:34:13

LINQ

2009-08-27 09:13:28

LINQ查詢表達式

2009-09-07 17:18:33

LINQ查詢表達式

2009-09-11 09:53:16

Linq查詢表達式

2009-09-17 11:08:55

LINQ查詢表達式

2009-09-17 09:09:50

Lambda表達式Linq查詢

2009-09-11 12:32:33

LINQ表達式

2009-09-09 13:01:33

LINQ Lambda

2009-09-15 15:18:00

Linq Lambda

2009-06-12 09:44:04

LINQ查詢復(fù)合from子句

2009-09-09 17:45:07

Linq表達式

2009-09-11 09:48:27

Linq Lambda

2009-09-17 14:21:19

LINQ表達式

2009-09-17 09:15:49

Linq表達式樹

2009-09-17 09:44:54

Linq Lambda

2009-09-15 17:30:00

Linq Lambda

2009-09-17 10:40:22

Linq Lambda

2009-09-17 14:24:35

LINQ表達式

2009-09-09 17:14:17

Linq lambda
點贊
收藏

51CTO技術(shù)棧公眾號