我对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()
并没有改变任何内容。
解决方案:问题出在我使用DataSet时。当我使用DataContext时,它工作得非常好。感谢您的DataSet或DataContext问题lazyberezovsky或我从来没有尝试过。 使用以下作品:
var supvName = db.Supervisors.Select(m => m.Names);
supv_cbox.ItemsSource = supvName;
谢谢Surjah Singh。
答案 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");