【问题标题】:Error getting items from Entity Framework using Lambda query使用 Lambda 查询从实体框架获取项目时出错
【发布时间】:2012-10-19 00:36:07
【问题描述】:

我有一个列表框,我试图通过实体框架 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";

【问题讨论】:

    标签: linq entity-framework lambda listbox


    【解决方案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 });
    

    希望这能解决您的问题。

    【讨论】:

    • 这有助于解决问题的第一部分,但是现在当我分配给 Listbox1.DataSource 时,我得到了错误 System.ArgumentException: Complex DataBinding accepts as a data source either an IList or an IListSource. 但是,我找到了答案 link
    • 这里是链接stackoverflow.com/questions/6655510/… 你能解释一下为什么 AsEnumerable 会有所作为吗?
    • @MAkin AsEnumerable 执行查询,因此之后您将使用 .NET 集合。在此之前,运行时将尝试将您写入的任何表达式转换为 SQL。
    【解决方案2】:

    将代码部分与 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: Complex DataBinding accepts as a data source either an IList or an IListSource. 但是,我找到了答案 (stackoverflow.com/questions/6655510/…) 所以,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 2020-04-05
    相关资源
    最近更新 更多