2016-07-21 11 views
0

各hardware_id列の一致する文字列が一致する文字列がない場合はnullを返すLinqクエリが必要です。主キー idごとの文字列のリストとの完全一致

  • 名(文字列)
  • USER_ID(int型)
  • hardware_id(int型)
  • -

    • ID(INT):

      私は、次の表を持っていますフレーズを含むList<string>があります。 List内のすべてのフレーズが名前の行に一致する文字列を持っている場合は、hardare_id番号を返します。フレーズの1つにnameが一致しない場合はnullを返し、すべてのフレーズに対して各hardware_idごとにすべてのフレーズが存在する場合、そのハードウェアIDのリストを返す必要があります。リスト内のすべてのフレーズ

      や他の言葉では、hardware_idのリストを返すのList<string>にものを一致する「sの各IDを、そのすべてのnameが持っている」と。

      私は別のクエリで各Idを反復することを考えましたが、効果的な方法ではありません。おそらくあなたはこれに取り組むための良い質問を知っているでしょう。 私はEntity Framework 6/C#/ MySQLを使用しています

      注:クエリはユーザーIDごとにのみ実行されます。だから私は最初にユーザーIDでテーブルをフィルタリングし、条件を満たす一致するhardare_idを見つける必要があります。その後、

    答えて

    1

    hardware_id上のグループと、私は今それを試してみますList

    table.GroupBy(x=>x.hardware_id) 
        .Where(x=> x.All(s=> phrases.Contains(s.name)) 
        .Select(x=>x.Key); 
    
    +0

    内のすべてのフレーズの存在を探して、私は近くにあった、私はhardware_id上​​でグループで始まり、私はのためにそれを反復する考えそれぞれがあなたのものですが、すっきりとしたクエリ専用ソリューションのように見えます。 –

    +0

    user_idフィルタリングはどこに追加しますか? Whereセクションに別のフィルタを追加する必要があります。 –

    +1

    私は 'Where'条件そのものに置くことをお勧めします。 –

    関連する問題