1

2 つのリストのデータを条件付きで結合する

テーブル構造は次のとおりです

MobileID   ModelID   ManufacturerID    IsApproved

IsApproved はブール値です。

データベースに新しいモバイル エントリが作成されると、管理者に承認されます。IsApproved 値が 0 になるまでは、承認されると IsApproved 値が 1 になります。

私は次のようにしたい

以下に記述された最初のクエリを使用して、承認されたすべてのモバイルのリストを取得しています

今の問題は、2つの条件に基づいてすべてのモバイルを表示する必要があることです

1) 同じモデル ID とメーカー ID を持つモバイルが存在する場合 (仕様が更新されていることを意味します)、その IsApproved フィールドは 0 になります --> DB ではなく、表示目的のみのリストになります)

2) モバイルが新しい場合、IsApproved ステータスは 0 になります。

この 2 つのリストを条件付きでマージするにはどうすればよいですか?

私のLINQクエリは以下の通りです

var listApproved = objMobile.MobileLists.where(mb => mb.IsApproved == true).toList();
var listUnApproved = objMobile.MobileLists.where(mb => mb.IsApproved == false).toList();

テーブルデータが次のようになっているとします

MobileID    ModelID     ManufacturerID     IsApproved
01            mod1             manu1               1
02            mod2             manu2               1
03            mod3             manu3               1
04            mod1             manu1               0
05            mod5             manu5               0
06            mod6             manu6               0
07            mod2             manu2               0

私はリストが欲しい

MobileID    ModelID     ManufacturerID     IsApproved
01            mod1            manu1            0
02            mod2            manu2            0
03            mod3            manu3            1
05            mod5            manu5            0
05            mod6            manu6            0
4

1 に答える 1

1

まず、リストをメモリにキャッシュして、複数回取得しないようにしましょう。

var listOfAllMobiles = objMobile.MobileLists.ToList();

次に、すべてのモバイルを取得するロジックを実行しましょう。

var mobileList = listOfAllMobiles
    .Select(m => new Mobile
                 {
                     IsApproved = m.IsApproved == true && !listOfAllMobiles
                         .Any(l => l.ModelID == m.ModelID
                             && l.ManufacturerID == m.ManufacturerID
                             && l.MobileID != m.MobileID),
                     MobileID = m.MobileID,
                     ModelID = m.ModelID,
                     ManufacturerID = m.ManufacturerID
                 })
    .ToList();

編集:ManufacturerId上記のコードは正しい値を設定しますが、重複した とでモバイルを除外しませんModelIDforeachそのためには、次のように追加を使用する必要があります。

var displayMobileList = new List<Mobile>();

foreach(var mobile in mobileList
    .Where(m => !displayMobileList
        .Any(m2 => m2.ModelID == m.ModelID 
            && m2.ManufacturerID == m.ManufacturerID)))
{
    displayMobileList.Add(mobile);
}
于 2012-05-24T14:20:29.603 に答える