从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
    }

从List<Postavke>()中查找属性值

您可以查询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;