35

私は次のビジネスオブジェクトを持っています:

    public class ItemCategoryBO
    {
       public string ItemCategory { get; set; }
       public string Title { get; set; }
    }

    public class ItemBO
    {
       public int ItemId { get; set; }
       public string Title { get; set; }
       public string ItemCategory { get; set; } 
    }

    List<ItemCategoryBO> categoryList = new List<ItemCategoryBO>();

    ItemCategoryBO itemCategory = new ItemCategoryBO();
    itemCategory.ItemCategoryCd = "CARS";
    itemCategory.Title = "Cars";

    ItemCategoryBO itemCategory2 = new ItemCategoryBO();
    itemCategory.ItemCategoryCd = "PLANES";
    itemCategory.Title = "Planes";

    categoryList.Add(itemCategory);
    categoryList.Add(itemCategory2);

    List<ItemBO> itemList = new List<ItemBO>();

    ItemBO item1 = new ItemBO();
    item1.ItemId = 1;
    item1.Title = "1st item";
    item1.ItemCategoryCd = "OTHER";

    ItemBO item2 = new ItemBO();
    item2.ItemId = 2;
    item2.Title = "2nd Item";
    item2.ItemCategoryCd = "CARS";

    ItemBO item3 = new ItemBO();
    item3.ItemId = 3;
    item3.Title = "3rd Item";
    item3.ItemCategoryCd = "PLANES";

    itemList.Add(item1);
    itemList.Add(item2);
    itemList.Add(item3);

いくつかのカテゴリのリストがある場合、カテゴリのリストからカテゴリを含むアイテムのリストを見つけるにはどうすればよいですか?(私の例では、アイテム2と3を取り戻したいです)

4

5 に答える 5

113

次のような状況の場合:

List<ItemBO> items;
List<ItemCategoryBO> categories;

カテゴリのリストにあるカテゴリを持つすべてのアイテムを取得したい場合は、次を使用できます。

IEnumerable<ItemBO> result = items.Where(item =>
    categories.Any(category => category.ItemCategory.equals(item.ItemCategory))); 

Any演算子は、ソースシーケンスを列挙し、いずれかの要素が述語によって指定されたテストを満たす場合にtrueを返します。この場合、カテゴリリストにItemCategoryBOが含まれ、そのItemCategory文字列がアイテムのItemCategory文字列と同じである場合はtrueを返します。詳細については、MSDNをご覧ください。

于 2012-05-24T22:19:38.263 に答える
2

これを試して:

List<ItemBO> items = ...;
ItemCategoryBO category = ...;

List<ItemBO> filteredItems = items
    .Where( i => i.ItemCategory.Equals(category) )
    .FirstOrDefault();

OPの更新された質問に対処するために更新されました:

いくつかのカテゴリのリストがある場合、カテゴリのリストからカテゴリを含むアイテムのリストを見つけるにはどうすればよいですか?(私の例では、アイテム2と3を取り戻したいです)

私はあなたが実際にこれを2つのステップで行うべきだと思います。まず、アイテムの個別のリストを取得します。次に、アイテムから、カテゴリのリストを取得します。それで:

// First, get the distinct list of items
List<ItemBO> items = new List<ItemBO>();
foreach ( var category in categories )
{
    foreach ( var item in category.Items )
    {
        if ( !items.Contains(item) )
            items.Add(item);
    }
}

// Second, get the list of items that have the category.
List<ItemBO> filteredItems = items
    .Where( i => i.ItemCategory.Equals(category) )
    .FirstOrDefault();
于 2012-05-24T22:04:30.553 に答える
1

いくつかのlinqを使用してみてください

  List<ItemBO> itm = new List<ItemBO>;
 //Fill itm with data

 //get selected item from control

 string selectedcategory = cboCatetories.SelectedItem;

 var itms = from BO in itm where itm.ItemCategory = selectedcategory                              select itm;

itms now contains all items in that category
于 2012-05-24T22:03:56.783 に答える
1

これが私がLinqpadでしたことです

void Main()
{{

    var cat1 = new ItemCategoryBO {ItemCategory = "c1"、Title = "c1"};
    var cat2 = new ItemCategoryBO {ItemCategory = "c2"、Title = "c2"};

    var item1 = new ItemBO {ItemId = 1、Title = "item1"、ItemCategory = "c1"};
    var item2 = new ItemBO {ItemId = 1、Title = "item2"、ItemCategory = "c2"};
    var item3 = new ItemBO {ItemId = 1、Title = "item3"、ItemCategory = "c2"};
    var item4 = new ItemBO {ItemId = 1、Title = "item4"、ItemCategory = "c3"};

    var items = new List(){item1、item2、item3、item4};
    var category = new List(){cat1、cat2};

    varitemsInCategory=アイテム内のアイテムから
    item.ItemCategoryはcategory.ItemCategoryからitemInCategoryに等しいカテゴリのカテゴリに参加します
    itemInCategoryのcategoryItemから
    新しい{item.Title、item.ItemCategory}を選択します。

    itemsInCategory.Dump();
}

//ここで他のメソッドとクラスを定義します
      パブリッククラスItemCategoryBO
        {{
           public string ItemCategory {get; セットする; }
           public string Title {get; セットする; }
        }

        パブリッククラスItemBO
        {{
           public int ItemId {get; セットする; }
           public string Title {get; セットする; }
           public string ItemCategory {get; セットする; }
        }

これは次を返します:

タイトル、ItemCategory
item1 c1
item2 c2
item3 c2
于 2012-05-24T22:14:08.110 に答える
0

お役に立てれば:

var result = (Object to search in).Where(m => (Object to compare to).Any(r => r.Equals(m.Key)).ToList();
于 2019-07-25T11:20:45.213 に答える