1

モデル

class MeterReadingTypes 
{
    int id { get; set;}
    bool isSelected { get; set; }
    string Name { get; set; } 
    .....
}

リンク

entity.MeterReadingTypes;

trueまたはfalseの値を持つレコードがあり、1つの値のみをtrueに設定し、他の値をfalseに設定したい。

オリジナルリスト

id | isSelected | Name |
------------------------
 1 |      false |    A |
 2 |      false |    B |
 3 |       true |    C |
 3 |       true |    D |
 5 |      false |    E |
 6 |      false |    F |
 7 |       true |    G |

このリストを次のように設定します。

id | isSelected | .. |
-----------------
 1 |      false |    A |
 2 |      false |    B |
 3 |       true |    C |
 4 |      false |    D |
 5 |      false |    E |
 6 |      false |    F |
 7 |      false |    G |

1 つのプロパティのみを に設定したいのですが、これを行うことはできますtrueか?

編集

私の解決策

List<OsosPlus2.Core.DataAccess.MeterReadingTypes> types = new List<Core.DataAccess.MeterReadingTypes>();

foreach (var unselectedTypes in entity.MeterReadingTypes)
{
    if(unselectedTypes.Name == "C") unselectedTypes.IsSelected = true;
    unselectedTypes.IsSelected = false;
    types.Add(unselectedTypes);
}

return PartialView(types);

エレガントなソリューションはありますか?

4

2 に答える 2

3

LINQ の「Q」はクエリを表します。クエリは何も更新しないため、LINQ はオブジェクトを更新する正しい方法ではありません。最も簡単で簡潔な解決策は次のとおりです。

foreach(var type in entity.MeterReadingTypes)
    type.IsSelected = type.MeterType == typeId;

何らかの LINQ を使用することを主張する場合は、次のようにすることができます。

foreach(var unselectedType in entity.MeterReadingTypes
                                    .Where(x => x.MeterType != typeId))
{
    unselectedType.IsSelected = false;
}

foreach(var selectedType in entity.MeterReadingTypes
                                  .Where(x => x.MeterType == typeId))
{
    selectedType.IsSelected = true;
}

ご覧のとおり、コードがかなり長くなります。

別のアプローチは次のとおりです。

entity.MeterReadingTypes.Select(x => { x.IsSelected = types.MeterType == typeId;
                                       return x; });

繰り返しますが、単純なforeachバージョンには何の利点もありません。

于 2013-02-13T08:01:46.070 に答える
0

unselectedTypes.IsSelected = false;最後に来るので、ソリューションはすべてのアイテムを選択解除に設定します。あなたはこれを行うことができます:

foreach (var unselectedType in entity.MeterReadingTypes)
{
    unselectedType.IsSelected = (unselectedType.Name == "C");
}
于 2013-02-13T09:47:06.670 に答える