2016-05-23 1 views
-3

これを行うための単純なLINQクエリがあると仮定します。以下のコードを参照してください、コメントは私が何をしたいのかを説明:LINQを使ってリストにあるアイテムだけを取得する<>

私は3つのテーブル

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が常に注文された場合、このようなことコースIDシーケンス注文には十分だろう:resultあなたが得るが、から構成され、すべての対応MainCoursesを含む、IEnumerable<IGrouping<SubCourse>>ある

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

courseIdListで参照されているCourses(理論的には複数の一致があるかもしれません。MainCourse
IGroupingKeyMainCourse.IDです。

+0

ありがとうmate.Willそれを確認し、返信を:) – ksg

関連する問題