2016-05-23 26 views
-3

這些項目我會假設有一個簡單的LINQ查詢來做到這一點,我只是不完全知道如何。請參考下面代碼段,註釋所描述的,我想怎樣做:使用LINQ獲取只有列表<>

我有三個表

Course 
    Id  Name 
    ---- ------ 
    1  php 
    2  joomla 
    3  mysql 

MainCourse 
    Id  CourseCode 
---- ------------- 
    1  Foundation 
    2  Diploma 
    3  Professional 

SubCourse 
    Id CourseId MainCourseId 
---- --------- -------------- 
    1  1    1 
    2  1    2 
    3  2    2 
    4  1    3 
    5  2    3 
    6  3    3 

    List<int> courseIdList={1,2} 

//I would like to perform a LINQ query to give me 'CourseCode' 
//from 'courseIdList' 
//this example should give me 'Diploma' 
//CourseIdList could vary below are the expected results 
//CourseIdList={1} ==> CourseCode=Foundation(MainCourse) 
//CourseIdList={1,2} ==> CourseCode=Diploma(MainCourse) 
//CourseIdList={1,2,3} ==> CourseCode=Professional(MainCourse) 

//Rule is that I want to get only those items from the subcourse 
//where 'courseId(subcourse)' matches the 'courseIdList' 

//Say CourseIdList={1,2},I need to omit the following Id (1,4,5,6) 
//from subcourse since MainCourseId=1 , contains courseId =1 (not 1,2) 
//and MainCourseId=3 , contains courseId = 1,2,3 (not 1,2) 
+6

這不是很清楚。爲什麼只有ID 2和3? 「CourseId」1或2的其他人怎麼樣? –

+0

當你說LINQ時,你在查詢內存中的對象嗎?或通過ORM的數據庫?要麼...? (LINQ有很多不同的實現) –

+0

'courseIdList'中的項目與'SubCourse'中的項目匹配?你在'MainCourseId'上匹配嗎?否則這根據您的預期輸出+輸入是沒有意義的。好吧,你現在編輯了你的問題,並沒有提到'SubCourse'?無論如何,爲什麼預期產出現在只是'文憑'而不是'基礎'和'文憑'(1,2)? – DGibbs

回答

0

所以,你可以通過在MainCourseId分組SubCourse,然後創建的列表,這樣做相應課程的ID並將此列表與您的courseIdList進行比較。

一個簡單的例子:

var result = subCourses.GroupBy(sc => sc.MainCourseId). 
       Where(g => g.Select(c => c.CourseId).SequenceEqual(courseIdList)); 

但要注意,如果序列中的相同順序SequenceEquals纔有效。因此,您需要稍微增強此Where子句以比較可能不是相同順序的序列。

如果您courseIdList始終是有序的,這將是足夠的訂單像這樣的課程編號序列:

var result = subCourses.GroupBy(sc => sc.MainCourseId). 
       Where(g => g.Select(c => c.CourseId).OrderBy(id => id).SequenceEqual(courseIdList)); 

result你得到的是一個IEnumerable<IGrouping<SubCourse>>,包含所有相應MainCourses是由的Courses參考您的courseIdList(理論上可能有多個匹配的MainCourse)。
IGroupingKeyMainCourse.ID

+0

謝謝mate.Will檢查並給予回覆:) – ksg