首页 > 解决方案 > C#在数组列表中搜索特定值并返回相关值

问题描述

我希望这不是一个愚蠢的简单问题。我很简单地想弄清楚如何通过 C# 在 SQLite 中操作一个相对简单的表。

我希望获取一个参数并在数组列表中搜索参数匹配的一个这样的数组,并在同一个数组中返回一个相关变量。

例如,列表中的数组可能在哪里。

Name          IATA

Brisbane        BNE

sqlbind:

public static List<Airport> LoadAirports()
{
    using (IDbConnection cnn = new SQLiteConnection(LoadConnectionString()))
    {
        var output = cnn.Query<Airport>("select * from Airport", new DynamicParameters());
        return output.ToList();
    }
}

班上:

class Airport
{
    int Id { get; set; }
    string Name { get; set; }
    string LocationName { get; set; }
    string IATA { get; set; }
    string PortType { get; set; }
    string PortOwner { get; set; }
    string MotherPort { get; set; }
    bool Active { get; set; }
    bool IsApplyMeetAndGreet { get; set; }
    decimal MeetAndGreet { get; set; }
}

主程序:

List<Airport> Airports = new List<Airport>();
public FreightCalculator()
{
    LoadAirportsList();
    string OriginName = OriginInput.Value;
    var OriginAirport = Airports.Where(s => s.Name == OriginName);
}
private void LoadAirportsList()
{
    Airports = SqliteDataAccess.LoadAirports();
}

我尝试了 Where、Equals、For each indexing 等的各种组合。总是会出现某种错误。

上述 Airports.Where 的错误是 s.Name 由于其保护级别而无法访问。

如果我做:

var OriginAirport = Airports.Where(Name => Name == OriginName);

我收到一个错误,其中操作数 == 不能与 Airport 和 String 一起使用(尽管 Name 是 Airport 中的字符串。)

我要么遗漏了一些简单的东西,要么把它弄得比它需要的更复杂。找到匹配的机场后,我需要返回 IATA 代码。

我设想看起来像这样:

var OriginIATA = OriginAirport.IATA;

我很累,感觉很笨。请帮忙 :(

标签: c#sqlite

解决方案


由于您将 Airport 类的所有成员都声明为属性,因此我假设您想公开它们。

您得到的错误是因为它们是私有成员,无法在课堂外访问。

将“机场”类更改为:

class Airport
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string LocationName { get; set; }
    public string IATA { get; set; }
    public string PortType { get; set; }
    public string PortOwner { get; set; }
    public string MotherPort { get; set; }
    public bool Active { get; set; }
    public bool IsApplyMeetAndGreet { get; set; }
    public decimal MeetAndGreet { get; set; }
}

推荐阅读