通过Lambda中的起始字母搜索

时间:2013-04-17 16:18:51

标签: c# linq-to-sql lambda

我想设置一个按钮,当我按下它时,它将获取文本框中的字符串并查找数据表上以此字符串或字符开头的某些Feild 上的所有记录。 然后在Listbox或DataGridViewer

中显示结果

这里是我已经实现的一点代码,但我不能继续它

   private void button3_Click(object sender, EventArgs e)
    {
        MyLinqDataContext MyData = new MyLinqDataContext();
        MyList myLambda =  MyData.MyLists.First(lambda => lambda.First_Name.StartsWith(TxtFirstName.Text));

    }

提前致谢:)

2 个答案:

答案 0 :(得分:2)

1)linq中的First返回单个记录。您将需要使用Where返回列表。

2)linq中的Where将返回类型为IEnumerable<T>的集合。您之后需要致电.ToList(),或使用var作为类型。

3)只要您具有可查询格式的原始表,就不需要创建新的数据上下文来对其进行运行。

最终代码,例如

private void button3_Click(object sender, EventArgs e)
{
    var myLambda =  MyDataTable.AsEnumerable().Where(lambda => lambda.Field<string>("First_Name").StartsWith(TxtFirstName.Text));
    //var should be of the type IEnumerable<DataRow>

    //from here, we can use this var as the DataSource for another display
    resultsBox.DataSource = myLambda;
    //assuming resultsBox can interpret a datarow correctly.  
    //You may need to select First_Name only, or some other data, out of the returned values.
}

或者,使用数据上下文

private void button3_Click(object sender, EventArgs e)
{
    MyLinqDataContext MyData = new MyLinqDataContext();
    var myLambda =  MyData.MyLists.Where(lambda => lambda.First_Name.StartsWith(TxtFirstName.Text));

    resultsBox.DataSource = myLambda;
}

答案 1 :(得分:1)

如果您想查找不想使用.First()的所有记录,请使用.Where()

private void button3_Click(object sender, EventArgs e)
{
    MyLinqDataContext MyData = new MyLinqDataContext();
    MyList myLambda =  MyData.MyLists.Where(lambda => lambda.First_Name.StartsWith(TxtFirstName.Text[0].ToString()));
}

以上使用字符串[0]的第一个索引来检索第一个字符。