我想将LINQ
查询的结果返回到数组,然后列表在此数组中查找,例如字母为"A"
。并将列表返回到包含所有字母"A"
的组合框。
我的linq查询:
var collectionName = (
from row in repos.GetTable<Table_Names>()
select row.Name
).Distinct().ToArray();
我现在不知道如何搜索数组,以便找到所有包含字母"A"
的数组。
最终,我想在数组中搜索而不是向数据库发送查询。这样可以使组合框中的列表动态缩小。
答案 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; }
}