1. ホーム
  2. c#

[解決済み] LINQ: オブジェクトにリストからの項目が含まれない場合の選択

2023-07-10 03:27:15

質問

私はここでLINQ構文と格闘しています...私はそれをここに投げ出すと思いました。私が探しているものを他のどこでも正確に見つけることができません。

OK、これを手に入れたとしましょう。

public class Bar
{
   public int BarId { get; set; }
}

public class Foo
{
   public List<Bar> BarList { get; set; }
}

List<Foo> fooBunch = GetABunchOfFoos(); //let's just assume I'm getting more than one
List<Foo> fooSelect = new List<Foo>;
List<Bar> filterBars = GetAFewBars(); //assume I'm getting like 2 or 3

fooSelect = (from f in fooBunch
             where !(from b in f.BarList select b.BarId).Contains(ITEM FROM filterBars.BarId)
             select f).ToList();

要するに、私はLINQを使って、別のリストにあるオブジェクトを元に、自分のリストをフィルタリングしたいのです。これが意味をなすといいのですが。私はちょうどContainsの部分で迷っていると思います...私はそれをどのように書けばよいのかわからないのです。

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

一般的には、"Except" という拡張子を探しているようです。

var rejectStatus = GenerateRejectStatuses();
var fullList = GenerateFullList();
var rejectList = fullList.Where(i => rejectStatus.Contains(i.Status));
var filteredList = fullList.Except(rejectList);

この例では、GenerateRegectStatuses() は拒否したいステータスのリスト(あなたの例に基づくより具体的な表現では List<int> のID)