示例#1
0
        public static async Task <Taxon[]> GetSubtaxaAsync(Taxon taxon)
        {
            List <Taxon> result = new List <Taxon>();

            string table_name         = Taxon.TypeToDatabaseTableName(taxon.GetChildRank());
            string parent_column_name = Taxon.TypeToDatabaseColumnName(taxon.type);

            if (string.IsNullOrEmpty(table_name))
            {
                return(result.ToArray());
            }

            string query = "SELECT * FROM {0} WHERE {1} = $parent_id";

            using (SQLiteCommand cmd = new SQLiteCommand(string.Format(query, table_name, parent_column_name))) {
                cmd.Parameters.AddWithValue("$parent_id", taxon.id);

                using (DataTable rows = await Database.GetRowsAsync(cmd))
                    foreach (DataRow row in rows.Rows)
                    {
                        result.Add(Taxon.FromDataRow(row, taxon.GetChildRank()));
                    }
            }

            // Sort taxa alphabetically by name.
            result.Sort((lhs, rhs) => lhs.name.CompareTo(rhs.name));

            return(result.ToArray());
        }
示例#2
0
        public static async Task <Taxon[]> GetTaxaAsync(string name, TaxonRank rank)
        {
            List <Taxon> taxa       = new List <Taxon>();
            string       table_name = _getRankTableName(rank);

            if (string.IsNullOrEmpty(table_name))
            {
                return(null);
            }

            using (SQLiteCommand cmd = new SQLiteCommand(string.Format("SELECT * FROM {0} WHERE name = $name OR common_name = $name", table_name))) {
                cmd.Parameters.AddWithValue("$name", name.ToLower());

                using (DataTable table = await Database.GetRowsAsync(cmd))
                    foreach (DataRow row in table.Rows)
                    {
                        taxa.Add(Taxon.FromDataRow(row, rank));
                    }
            }

            return(taxa.ToArray());
        }