Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 使用Lambda查询从实体框架获取项时出错_Linq_Entity Framework_Lambda_Listbox - Fatal编程技术网

Linq 使用Lambda查询从实体框架获取项时出错

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

我有一个列表框,试图通过实体框架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";
请尝试以下方法:

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会起作用吗?@MAkin
AsEnumerable
执行查询,然后你就可以使用.NET集合了。在此之前,运行时将尝试将您写入的任何表达式转换为SQL。这有助于解决问题的第一部分,但现在当我分配给Listbox1.DataSource时,会出现错误
System.ArgumentException:Complex DataBinding接受IList或IListSource作为数据源。
但是,我找到了答案()所以,谢谢!