从List()中查找属性值
本文关键字:查找 属性 List Postavke | 更新日期: 2023-09-27 18:07:45
我有一个类"Postavke",然后我将它存储到
List<Postavke> postavke = new List<Postavke>();
现在我想从这个列表中找到一些元素(属性)。我知道"姓名","姓氏",我想知道"地址"。
如果我知道"姓名"answers"姓氏",如何获得"地址"。这些都是Postavke类
中的属性全班
public class Postavke
{
#region Properties
public string Name { get; set; }
public string Surname { get; set; }
public string Address { get; set; }
#endregion
#region Methods
public Postavke(string name, string surname, string address, string oznakaLokacije, string oznakaZapore)
{
Name = ean;
Surname = surname;
Address = address;
}
#endregion
}
您可以查询postavke中包含姓名和姓氏的所有结果,并将结果放入列表中。将结果放入列表中,我发现可以更容易地验证和处理未预见的项目,因为从它的外观来看,可能会出现重复的项目。
如果结果必须包含列表项中的所有数据,则:
List<Postavke> results = new List<Postavke>();
var query1 = from a in postavke
where a.Name == searchName
&& a.Surname == searchSurname
select a;
results.AddRange(query1);
此列表将包含包含确切姓名和姓氏的所有结果。如果你只想要地址,那么你可以使用:
List<string> results = new List<string>();
var query1 = from a in postavke
where a.Name == searchName
&& a.Surname == searchSurname
select a.Address;
results.AddRange(query1);
将生成一个地址列表。从这里,你可以验证列表,如果你想做这样的事情,检查列表中有多少项,这样你就知道你想如何处理它等。
如果你只想使用名字或姓氏,那么你可以删除要求使用其中一个或另一个的行。
如果你最终得到了重复的结果,但结果是一样的,那么你可以改变
行results.AddRange(query1);
results.AddRange(query1.Distinct());
通过使用Distinct()方法,它将对查询进行排序并删除重复项,因此列表将不会以与不使用它时相同的顺序排列。
如果你只想要一个结果,那么通过使用
检查列表中有多少项来验证它是值得的results.Count
如果它等于1,你可以继续,否则抛出一条消息或其他你想要处理它的方式。其他好的验证方法是在搜索过程中设置ToLower()和Trim()值,以避免实际更改原始文本。
那么以最后一个查询为例:
List<string> results = new List<string>();
var query1 = from a in postavke
where a.Name.ToLower().Trim() == searchName.ToLower().Trim()
&& a.Surname.ToLower().Trim() == searchSurname.ToLower().Trim()
select a.Address;
results.AddRange(query1);
您还可以在执行查询后使用where子句过滤查询:
List<string> results = new List<string>();
var query1 = from a in postavke
select a.Address;
query1 = query1.Where(h => h.Name == searchName);
query1 = query1.Where(h => h.Surname == searchSurname);
results.AddRange(query1);
将两个where子句分开,以显示您可以在不同的点执行where子句,因此您可以在if语句中使用where子句。您可以将这两个组合成:
query1 = query1.Where(h => h.Name == searchName && h.Surname == searchSurname);
希望这对你有帮助
如果你能确定只有一个匹配
var address = poatavke.Where(p=>p.Name == name && p.Surname == surname).Single().Address;
如果你不知道是否有匹配项,你可以这样做:
var posta = poatavke.Where(p=>p.Name == name && p.Surname == surname).SingleOrDefault()
var address = posta == null ? string.Empty : posta.Address;
如果你不知道将会有多少匹配,但总是想要第一个(或者使用不理解Single()的ET)
var posta = poatavke.Where(p=>p.Name == name && p.Surname == surname).FirstOrDefault()
var address = posta == null ? string.Empty : posta.Address;