Microsoft Study Bible

November 3, 2009

Linq to SQL: Achieve Link Search and Criteria Queries

There is a need to display all the information of the members (MemberInfo) , Sorting  by SortNumber column of which the Member type is zero in Member Sort table .

 Table structure and the relevant test data scripts are as follows:

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

Using the traditional SQL mode query code

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)

Hope that the same support can be achieved in Linq to SQL .

Firstly, try out the failure code:

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;

The above code revised is as follows:

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;

The key statement is “from cx in x.where (d=>d.MemberType==0).DefaultEmpty();”,which means that it will return the data collection   of which  the MemberType==0 or the value of  MemberType does not exist in Connection Portfolio.

No Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress

Close
E-mail It