C#Linq-SQL查询结果什么都没有返回

时间:2013-09-17 14:01:15

标签: c# linq linq-to-dataset

我对LINQ(以及SQL)相当新。当尝试在C#“Supervisor”中查询我的SQL数据库时(其中只包含一个由nvarchar(50)变量组成的“名称”列,其中没有一个 Null ),supvName最终为空名单。如果我不将其转换为列表,supvName的类型为System.Data.EnumerableRowCollection<string>,如果有帮助的话。

public addNewEmp()
{
    InitializeComponent();
    using (TestDataSet db = new TestDataSet())
    {
        var supvName = (from n in db.Supervisors
                        select n.Names).ToList();
        foreach (string n in supvName)
        {
            supv_cbox.Items.Add(n);
        }
    }
}

即使使用Where语句,也没有显示出一个结果,所以我确信在我的代码中它只是一些简单的东西,我似乎无法弄明白。我已经尝试使用AsEnumerable()并没有改变任何内容。

编辑:我在VS 2010 WPF中这样做。此外,当我在TestDataSet.xsd中预览数据时,它确实返回数据库中的所有数据。

解决方案:问题出在我使用DataSet时。当我使用DataContext时,它工作得非常好。感谢您的DataSet或DataContext问题lazyberezovsky或我从来没有尝试过。 使用以下作品:

var supvName = db.Supervisors.Select(m => m.Names);
supv_cbox.ItemsSource = supvName;

谢谢Surjah Singh。

2 个答案:

答案 0 :(得分:1)

使用Linq to DataSet枚举DataTable时,应在datatable上调用AsEnumerable()并使用Field<T>扩展名获取列值:

 var supvName = (from r in db.Supervisors.AsEnumerable()
                 select r.Field<string>("Names")).ToList();

BTW查询变量r将为DataRow类型。


您的代码可以简化为:

 var names = db.Supervisors.AsEnumerable().Select(r => r.Field<string>("Names"));
 supv_cbox.DataSource = names.ToList();

答案 1 :(得分:0)

    //Var supvName = Supervisors.Select(m=>m.Names);

   var supvName = from s in Supervisors.Tables[0].AsEnumerable()
                     select s.Field<string>("Names");