实体框架中的对象查询

本文关键字:对象 查询 框架 实体 | 更新日期: 2023-09-27 18:08:10

我得到一个错误与ObjectQuery方法,有人可以帮助吗?

private void AddProductsToTabbedPanel()
        {
            foreach (TabPage tp in tabControl1.TabPages )
            {
                ObjectQuery<TblProduct> filteredProduct = new ObjectQuery<TblProduct>("Select value p from TblProduct as P", csdbe);
                foreach (TblProduct tpro in filteredProduct)
                {
                    Button btn = new Button();
                    btn.Text = tpro.Description;
                    tp.Controls.Add(btn);
                }
            }
        }

我的逻辑是,它在控制选项卡中添加按钮是基于什么是TblProduct

的内容

但是我得到了一个错误:

参数2:不能从"Coffee_Shop。CoffeeShopDatabaseEntities"System.Data.Entity.Core.Objects.ObjectContext"

最佳重载方法匹配"System.Data.Entity.Core.Objects.ObjectQuery.ObjectQuery(字符串,System.Data.Entity.Core.Objects.ObjectContext)'有一些无效的参数

实体框架中的对象查询

开始这里真正的问题是使用实体框架作为一种方式来运行你的sql代码,这不是什么实体框架。如果您有实体框架附加到您的数据库,只需这样做,以获得您的实体:

//assuming csdbe is your data context
var filteredProduct = csdbe.TblProduct;

在上面的例子中,你没有过滤你的查询,只是要求所有的查询。要过滤上面的示例,请使用。where

var filteredProduct = csdbe.TblProduct.Where(x => x.SomeValue == "yourValue");

现在回答你最初的问题:

参数2:不能从'Coffee_Shop '转换。CoffeeShopDatabaseEntities'到'System.Data.Entity.Core.Objects.ObjectContext'

它似乎是由例外,你得到的" csbe "是一个"CoffeeShopDatabaseEntities"实体。所需的第二个参数是数据上下文。

var filteredProduct = new ObjectQuery<TblProduct>("SELECT VALUE P FROM TblProducts AS P", yourContext);

——你的代码应该是这样的

string queryString = @"SELECT VALUE P FROM Tblproducts as P";
foreach (tblproducttype pt in cse.tblproducttypes)
{   
    ObjectContext context =((IObjectContextAdapter) cse).ObjectContext;
    ObjectQuery<tblproduct> filteredproduct = new ObjectQuery<tblproduct>(queryString, context);
    foreach (tblproduct tprod in filteredproduct)
    {
        Button b = new Button();
        b.Text = tprod.description;
        tp.Controls.Add(b);
    }
}