您可以通过 where 找到所需的地址,然后从 id 中选择一些字符串。
s.AddressId.Substring(s.AddressId.IndexOf("_")) is string
即
Select(s => s.AddressId.Substring(s.AddressId.IndexOf("_"))).ToList()
;返回子字符串列表
只需将其删除并使用
AllIDs= AllIDs.Where(s => s.AddressId.Length >= s.AddressId.IndexOf("_")).ToList()
作为
Where(s => s.AddressId.Length >= s.AddressId.IndexOf("_"))
过滤 AllID 列表,但将它们保留为IAddress
s
如果你重写是这样你应该能够看到问题是什么
你说
var items = from addr in AllIds
where addr.AddressId.Length >= addr.AddressId.IndexOf("_") // filter applied
select addr.AddressId.Substring(s.AddressId.IndexOf("_")); // select a string from the address
AllIDs = items.ToList(); // hence the error List<string> can't be assigned to List<IAddress>
但你想要
var items = from addr in AllIds
where addr.AddressId.Length >= addr.AddressId.IndexOf("_") // filter applied
select addr; // select the address
AllIDs = items.ToList(); // items contains IAddress's so this returns a List<IAddress>