使用Lambda查询从Entity Framework获取项目时出错

时间:2012-10-18 16:30:51

标签: 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 Case).Case_Id).Select(x => new  Pattern{  PatternID = x.PatternID, Pattern1 = x.Pattern1 });

        listBox1.DataSource = pAt;
        listBox1.ValueMember = "PatternID";
        listBox1.DisplayMember = "Pattern1";

2 个答案:

答案 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 });