Linq 使用Lambda查询从实体框架获取项时出错
我有一个列表框,试图通过实体框架linq/lambda查询用SQL Server查询的结果填充该列表框。我用组合框中的一个值填充查询。我经常遇到如下错误:无法创建“System.Object”类型的常量值。在此上下文中仅支持基本类型(“如Int32、String和Guid”) 有没有关于如何解决这个问题的建议?我只想在网格中填充两个字段Linq 使用Lambda查询从实体框架获取项时出错,linq,entity-framework,lambda,listbox,Linq,Entity Framework,Lambda,Listbox,我有一个列表框,试图通过实体框架linq/lambda查询用SQL Server查询的结果填充该列表框。我用组合框中的一个值填充查询。我经常遇到如下错误:无法创建“System.Object”类型的常量值。在此上下文中仅支持基本类型(“如Int32、String和Guid”) 有没有关于如何解决这个问题的建议?我只想在网格中填充两个字段 var pAt = ent.Patterns.Where(p => p.Case_Id == (cbCase.SelectedItem as
var pAt = ent.Patterns.Where(p => p.Case_Id == (cbCase.SelectedItem as Case).Case_Id).Select(x => new Pattern{ PatternID = x.PatternID, Pattern1 = x.Pattern1 });
listBox1.DataSource = pAt;
listBox1.ValueMember = "PatternID";
listBox1.DisplayMember = "Pattern1";
请尝试以下方法:
var pAt = ent.Patterns.AsEnumerable()
.Where(p => p.Case_Id == ((Case)cbCase.SelectedItem).Case_Id)
.Select(x => new Pattern{ PatternID = x.PatternID, Pattern1 = x.Pattern1 });
希望这能解决您的问题。将代码部分与SQL部分分开。实体框架不一定能使用代码对象构造SQL查询,但通常可以解决这个问题。例如:
var caseId = (cbCase.SelectedItem as Case).Case_Id;
var pAt = ent.Patterns.Where(p => p.Case_Id == caseId)
.ToArray()
.Select(x => new Pattern { PatternID = x.PatternID, Pattern1 = x.Pattern1 });
这有助于解决问题的第一部分,但现在当我分配给Listbox1.DataSource时,我得到错误
System.ArgumentException:复杂数据绑定接受IList或IListSource作为数据源。
但是,我找到了答案,这里是一个链接,你能解释一下为什么AsEnumerable会起作用吗?@MAkinAsEnumerable
执行查询,然后你就可以使用.NET集合了。在此之前,运行时将尝试将您写入的任何表达式转换为SQL。这有助于解决问题的第一部分,但现在当我分配给Listbox1.DataSource时,会出现错误System.ArgumentException:Complex DataBinding接受IList或IListSource作为数据源。
但是,我找到了答案()所以,谢谢!