我有一个Board
,其中包含OverallPartyResults
的列表。
OverallPartyResults
有一个属性PartyName
,在列表中应该是不同的。
我正在尝试编写用于将
OverallPartyResults
添加到列表的逻辑如果电路板没有包含具有相同代码的OverallPartyResults
,则应该只添加新的OverallPartyResults
。
我写的linq表达式是:
if (!Board.Select(i => i.PartyCode).Contains(party.PartyCode))
{
var newPartyResult = new OverallPartyResults()
{
PartyCode = party.PartyCode.Trim(),
NumberOfSeats = seatNumber
};
Board.Add(newPartyResult);
}
表达式错误,因为我在列表中使用相同代码获取OverallPartyResults
- 有人能看到我出错的地方吗?
答案 0 :(得分:3)
我怀疑Trim()
是值得责备的人。如果您在PartyCode
的开头或结尾有空格,那么您将获得重复PartyCode
s
像这样改写:
if (!Board.Any(i => i.PartyCode == party.PartyCode.Trim()))
{
var newPartyResult = new OverallPartyResults()
{
PartyCode = party.PartyCode.Trim(),
NumberOfSeats = seatNumber
};
Board.Add(newPartyResult);
}
使用Any()
代替Select(...).Contains()
。您正在从数据库中撤回所有PartyCode(如果您使用的是LINQ to BD)。 Any
转换为WHERE EXISTS
女巫更好(表现明智)。