0

我对 LINQ(以及 SQL)相当陌生。当尝试在 C#“Supervisors”中查询我的 SQL 数据库(它只包含由nvarchar(50)变量组成的一列“Names”,其中没有一个是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()which 并没有改变任何东西。

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

解决方案:问题出在我使用 DataSet 时。当我使用 DataContext 时,它工作得非常好。感谢您的 DataSet 或 DataContext 问题lazyberezovsky,否则我永远不会尝试过。使用以下作品:

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

也感谢 Surjah Singh。

4

2 回答 2

1

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

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

顺便说一句,查询变量r将是DataRow类型。


您的代码可以简化为:

 var names = db.Supervisors.AsEnumerable().Select(r => r.Field<string>("Names"));
 supv_cbox.DataSource = names.ToList();
于 2013-09-17T14:05:24.823 回答
0
    //Var supvName = Supervisors.Select(m=>m.Names);

   var supvName = from s in Supervisors.Tables[0].AsEnumerable()
                     select s.Field<string>("Names");
于 2013-09-17T14:32:17.423 回答