【发布时间】:2015-08-24 08:15:13
【问题描述】:
我有两个对象,即 Card 和 Transaction:
Card:
public string CardID {get; set;}
public string TransactionRef {get; set;}
Transaction:
public string TxnID {get; set;}
public string TxnDetails {get; set;}
注意:TransactionRef 的格式为 Date|TxnID
我还有List<Card> cardDetails和List<Transaction> transDetails这两个对象的列表
cardDetails:
{CardID = '1', TransactionRef = '20150824|Guid1'}
{CardID = '2', TransactionRef = '20150824|Guid2'}
{CardID = '3', TransactionRef = '20150824|Guid3'}
transDetails:
{TxnID = '23', TxnDetails = 'Guid1'}
{TxnID = '24', TxnDetails = 'Guid2'}
我想根据 TxnDetails 使用 transDetails 过滤 cardDetails,以便它从第二个列表中过滤掉不包含 TxnDetails 的项目。
这应该是输出:
cardDetails:
{CardID = '3', TransactionRef = '20150824|Guid3'}
我已经尝试过使用 linq:
cardDetails = cardDetails.Where(x => transDetails.Any(y => x.TransactionRef.Contains(y.TxnDetails) == false)).ToList();
但它总是将列表返回为空白。我已经尝试了这个查询的许多变体,但都没有成功。我知道在搜索他们并尝试他们的解决方案之前和之后都曾提出过这个问题,但我仍然无法正确解决。
谁能建议我的查询有什么问题?
注意:我忘了提一件事,这些列表可以包含 1000 条记录。所以性能也很重要。
【问题讨论】:
-
这个查询实际上应该返回所有卡片,你确定它没有返回吗?
-
是的,它不返回任何东西。我只想返回 cardDetails 中的第三个条目,即它不包含第二个列表中的任何 TxnDetails
-
当
TxnDetails是字符串时,为什么TxnDetails.ToString()? -
这个查询的性能指数是 n 的平方。您应该避免在循环内出现这种循环。尝试加入两个列表,以便它使用哈希表。
-
@MatthewWatson 实际上在我的代码中 TxnDetails 是一个 Guid,我将其转换为字符串。这里我只是将 TxnDetails 更改为字符串,但没有更新 linq 查询