2

私は次のようなC#コードに取り組んでいます:

public class Item
{
   public bool flag { get; set; }
   public string itemName { get; private set;};

   Item(string _name)
   {
       this.itemName = _name;
       this.flag     = false;
   }
}

public class MainClass
{
    public static void Main() 
    {
        List itemList = new List<Item>();
        itemList.Add(new Item("ProductA");
        itemList.Add(new Item("ProductA");
        itemList.Add(new Item("ProductB");

        var itemGroups = from item in itemList group item by item.itemName;
        foreach (var itemGroup in itemGroups)
        {
            foreach (Item i in itemGroup)
            {
                i.flag = true;
                break;
            }
        }
    }
 }

ここで達成したいのは、同じグループ内の他のアイテムに触れずに、グループ内の 1 つのアイテムだけを変更することです。上記のコードから、itemName が "ProductA" の最初のアイテムのみにフラグが true に設定されていると予想されます。しかし、結果として、両方のアイテム (itemName "ProductA" を持つ) のフラグが true に設定されています。

私はlinqが初めてです。私が間違っていることはありますか?または、どうすればここで目標を達成できますか?

どうもありがとう!!!

ダグ

4

3 に答える 3

0

あなたのコードは、グループ内のすべてのアイテムを列挙します。

        foreach (Item i in itemGroup)
        {
            i.flag = true;
            break;
        }

最初のものを取得する必要があります。First または FirstOrDefault メソッドを使用する

于 2013-05-19T13:09:48.070 に答える