1. ホーム
  2. linq

[解決済み] Linq to SQL 「where [column] in (list of values)」はどうやるの?

2022-10-31 03:33:21

質問

私はidのリストを取得する関数を持っています。そして、私はidに関連付けられた説明に一致するリストを返す必要があります。例えば、次のとおりです。

public class CodeData
{
    string CodeId {get; set;}
    string Description {get; set;}
}

public List<CodeData> GetCodeDescriptionList(List<string> codeIDs)
    //Given the list of institution codes, return a list of CodeData
    //having the given CodeIds
}

ですから、もし私自身がこのためのSQLを作成するのであれば、次のようなことを単純に行います(ここでin句は引数codeIdsのすべての値を含んでいます)。

Select CodeId, Description FROM CodeTable WHERE CodeId IN ('1a','2b','3')

Linq to Sqlでは、"IN"節に相当するものを見つけることができないようです。 私がこれまでに見つけた最高のものは(うまくいきませんが)。

 var foo = from codeData in channel.AsQueryable<CodeData>()
           where codeData.CodeId == "1" || codeData.CodeId == "2"
           select codeData;

問題は、コンパイル時に設定されるため、Linq to SQL の "OR" 節のリストを動的に生成することができないことです。

Linq to Sql を使用して、ある列が値の動的なリストに含まれていることをチェックする where 節をどのように達成するのでしょうか。

どのように解決するのですか?

使用方法

where list.Contains(item.Property)

あるいは、あなたの場合

var foo = from codeData in channel.AsQueryable<CodeData>()
          where codeIDs.Contains(codeData.CodeId)
          select codeData;

でも、ドット記法でやった方がいいかもしれません。

var foo = channel.AsQueryable<CodeData>()
                 .Where(codeData => codeIDs.Contains(codeData.CodeId));