我有一个列表框,我试图通过实体框架linq / lambda查询填充SQL Server查询的结果。我使用组合框中的值来提供查询。我不断收到如下错误:无法创建类型为'System.Object'的常量值。在此上下文中仅支持原始类型(例如Int32,String和Guid')。
有关如何解决此问题的任何建议?我只想在网格中填充两个字段
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";
答案 0 :(得分:1)
请改为尝试:
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 });
希望这能解决您的问题。
答案 1 :(得分:1)
将代码部分与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 });