0

多くのオブジェクトに基づいて単一のオブジェクトをフィルタリングする必要があるシナリオに直面しています。

例として、FruitプロパティとVegetableプロパティの両方で構成されるGroceryオブジェクトがあります。次に、個々の果物野菜のオブジェクトがあります。

私の目的はこれです:

var groceryList = from grocery in Grocery.ToList()
                  from fruit in Fruit.ToList()
                  from veggie in Vegetable.ToList()
                  where (grocery.fruitId = fruit.fruitId)
                  where (grocery.vegId = veggie.vegId)
                  select (grocery);

私が直面している問題は、果物と野菜のオブジェクトが空の場合です。 空とは、リスト数が0であることを意味し、フィルターリストが入力されている場合にのみフィルターを適用します。

オブジェクトがnullであるため、次のようなものも使用できません。

var groceryList = from grocery in Grocery.ToList()
                  from fruit in Fruit.ToList()
                  from veggie in Vegetable.ToList()
                  where (grocery.fruitId = fruit.fruitId || fruit.fruitId == String.Empty)
                  where (grocery.vegId = veggie.vegId || veggie.vegId == String.Empty)
                  select (grocery);

だから、私は果物野菜のリスト数をチェックし、連続してフィルタリングされた食料品オブジェクトで別々の式としてそれらをフィルタリングするつもりです。

しかし、単一のクエリ式でnullオブジェクトの場合でもリストを取得する方法はありますか?

4

5 に答える 5

0
var groceryList =
  from grocery in Grocery.ToList()
  join fruit in Fruit.ToList()
       on grocery.fruidId equals fruit.fruitId
       into groceryFruits
  join veggie in Vegetable.ToList()
       on grocery.vegId equals veggie.vegId
       into groceryVeggies
  where ... // filter as needed
  select new
  {
    Grocery = grocery,
    GroceryFruits = groceryFruits,
    GroceryVeggies = groceryVeggies
  };
于 2009-09-17T03:19:55.193 に答える
0

次のようなことを試してください。

var joined = grocery.Join(fruit, g => g.fruitId,
                                 f => f.fruitId,
                                 (g, f) => new Grocery() { /*set grocery properties*/ }).
                Join(veggie, g => g.vegId,
                             v => v.vegId,
                             (g, v) => new Grocery() { /*set grocery properties*/ });

食料品のプロパティを設定すると言いましたが、セレクターの g、f、v 変数から食料品オブジェクトのプロパティを設定できます。興味深いのは、明らかに設定g.fruitId = f.fruitIdg.vegeId = v.vegeIdです。

于 2009-09-17T03:06:01.253 に答える
0

ここではLINQ GroupJoin 演算子が役立つと思います。これは TSQL に似ています。LEFT OUTER JOIN

于 2009-09-17T03:09:29.303 に答える
0
IEnumerable<Grocery> query = Grocery

if (Fruit != null)
{
  query = query.Where(grocery =>
    Fruit.Any(fruit => fruit.FruitId == grocery.FruitId));
}

if (Vegetable != null)
{
  query = query.Where(grocery =>
    Vegetable.Any(veggie => veggie.VegetableId == grocery.VegetableId));
}

List<Grocery> results = query.ToList();
于 2009-09-17T03:10:21.127 に答える