【C#】【Linq】Linq で IN句 を表現する

Linq で IN句

 * ちょっと特殊なやり方ですが、Contains()を使って、IN句を表現できる

構文

var 【結果】 = 【対象のリスト】.Where(x => new[] {【IN句の条件リスト】}.Contains(【対象の項目】));

// 以下のように、分けても書ける(この方が分かりやすいかも)
// var 【IN句の条件リスト(変数)】 = new[] {【IN句の条件リスト】};
// var 【結果】 = 【対象のリスト】.Where(x => 【IN句の条件リスト(変数)】.Contains(【対象の項目】));

サンプル

// 店舗クラス
class Shop
{
    public int ShopId;
    public string ShopName;
}

private void button1_Click(object sender, EventArgs e)
{
    var shops = new[]
    {
        new Shop() {ShopId = 1, ShopName = "shop1"},
        new Shop() {ShopId = 2, ShopName = "shop2"},
        new Shop() {ShopId = 3, ShopName = "shop3"},
        new Shop() {ShopId = 4, ShopName = "shop4"},
        new Shop() {ShopId = 5, ShopName = "shop5"},
        new Shop() {ShopId = 6, ShopName = "shop6"},
    };

    // IN句の条件
    var inCause = new int[] { 1, 3, 5 };
    // ★ここ★
    var results = shops.Where(x => inCause.Contains(x.ShopId));

    string output = string.Empty;
    foreach (var result in results)
    {
        output = output + result.ShopName + " ";
    }

    this.label1.Text = output;
}