Linq进入数组,然后在数组中查找值并列出到组合框

时间:2018-08-13 10:59:49

标签: c# arrays linq

我想将LINQ查询的结果返回到数组,然后列表在此数组中查找,例如字母为"A"。并将列表返回到包含所有字母"A"的组合框。

我的linq查询:

var collectionName = (
    from row in repos.GetTable<Table_Names>() 
    select row.Name
    ).Distinct().ToArray();

我现在不知道如何搜索数组,以便找到所有包含字母"A"的数组。

最终,我想在数组中搜索而不是向数据库发送查询。这样可以使组合框中的列表动态缩小。

3 个答案:

答案 0 :(得分:2)

我认为最好是获取过滤后的集合,而不是在获取集合后执行搜索。因此,我建议您使用类似以下内容的Where子句来仅获取已过滤的项目:

string searchString ="A";

from row in repos.GetTable<Table_Names>() 
where row.Name.Contains(searchString)
select row.Name;

如果您要获取以给定搜索文本开头的字符串集合,也可以尝试使用Contains来代替StartsWith

答案 1 :(得分:0)

如果您不想在数据库中进行过滤,则可以使用linq to objects来进一步过滤内存中的集合:

var filtered = collectionName.Where(item => item.Contains("A")).ToArray();

答案 2 :(得分:0)

您可以在LINQ查询中使用SqlMethods.Like。检查下面的代码

private void comboBox1_TextChanged(object sender, EventArgs e)
    {
        comboBox1.DataSource = getItems(comboBox1.Text);
        comboBox1.DisplayMember = "Name";
        comboBox1.ValueMember = "ID";
    }
    public static List<ComboboxItem> getItems(string text)
    {
        DataClasses1DataContext context = new DataClasses1DataContext();
        try
        {
            List<ComboboxItem> Ilist = new List<ComboboxItem>();
            var query =  from x in context.testComboBoxes where SqlMethods.Like(x.name, '%' + text +'%') select x;
            foreach (var q in query)
            {
                ComboboxItem item = new ComboboxItem();
                item.ID = q.id;
                item.Name = q.name;
                Ilist.Add(item);
            }
            return Ilist;
        }
        catch (Exception ex)
        {
            return null;
        }
    }
    public class ComboboxItem
    {
        public object ID { get; set; }
        public string Name { get; set; }
    }