0

以下に説明する2つのリストがあります

lstOldItems に存在するすべてのsitempath値がlstNewItemsにも存在することを確認するにはどうすればよいです

C# コード

List<ItemsUnderControlObject> lstNewItems
List<ItemsUnderControlObject> lstOldItems


public class ItemsUnderControlObject
{
 public ItemsUnderControlObject();

 public bool bButtonEnabled { get; set; }
 public short iChkInterval { get; set; }
 public int iItemUnderCtrlUniqueID { get; set; }
 public DateTime? ItemCreationDateTime { get; set; }
 public DateTime? ItemLastAccessDateTime { get; set; }
 public DateTime? ItemLastModifiedDateTime { get; set; }
 public long lngItemSize { get; set; }
 public string sItemBackupLocation { get; set; }
 public string sItemcategory { get; set; }
 public string sItemCurrentStatus { get; set; }
 public DateTime sItemDatabaseCreationDateTime { get; set; }
 public string sItemName { get; set; }
 public string sItemPath { get; set; }
 public string sItemRequestStatus { get; set; }
 public string sItemTask { get; set; }
 public string sItemValue { get; set; }
 public string sItemValueSHA256 { get; set; }
 public string sSystemID { get; set; }
}
4

4 に答える 4

3

ここにExceptある LINQ の拡張メソッドを使用しない理由:

var oldItemPaths = lstOldItems.Select(l => l.sItemPath).Distinct();
var newItemPaths = lstNewItems.Select(l => l.sItemPath).Distinct();
bool isSame = !oldItemPaths.Except(newItemPaths).Any();

または、上記のコードで@Magnusの方法を使用して(マイナスExcept):

bool isSame = oldItemPaths.All(x => newItemPaths.Contains(x));
于 2013-02-25T21:54:48.527 に答える
2

高速なルックアップのために、最初にアイテムを に追加し、使用lstNewItemsするHashSetよりもAll:

var set = new HashSet<string>(lstNewItems.Select(x => x.sItemPath));
var res = lstOldItems.All(x => set.Contains(x.sItemPath));
于 2013-02-25T21:59:30.480 に答える
2

別のリストへのパスを抽出したくない場合に備えて、1 つのライナー:

stOldItems.All(x => lstNewItems.Any(y=> x.sItemPath == y.sItemPath));
于 2013-02-25T22:01:36.553 に答える
1

linqを試してください

これに沿った何か

List<string> sitempaths = lstNewItems.Select(i => i.sitempath).ToList();

bool hasSitempaths = lstOldItems
    .Where(x => sitempaths.contains(x.sitempath)).ToList()
    .Count == lstOldItems.Count;

これは実際にはテストされていないことに注意してください。調整する必要がある場合があります

于 2013-02-25T21:57:07.223 に答える