Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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
将MS SQL转换为实体框架_Sql_Sql Server_Asp.net Mvc_Entity Framework - Fatal编程技术网

将MS SQL转换为实体框架

将MS SQL转换为实体框架,sql,sql-server,asp.net-mvc,entity-framework,Sql,Sql Server,Asp.net Mvc,Entity Framework,我试图学习MVC,但当我尝试搜索客户购买的产品时,我无法使用Entity Framework编写。我可以用MS SQL查询进行搜索,但不能转换为实体框架 控制器: public ActionResult Orders() { Customer c = db.Customers.Find(Session["UserID"]); List<Order> userorders= db.Orders.Where(x => x.Custom

我试图学习MVC,但当我尝试搜索客户购买的产品时,我无法使用Entity Framework编写。我可以用MS SQL查询进行搜索,但不能转换为实体框架

控制器:

    public ActionResult Orders()
    {
        Customer c = db.Customers.Find(Session["UserID"]);
        List<Order> userorders= db.Orders.Where(x => x.CustomerID == c.ID).ToList();
        List<OrderProduct> orderproducts = db.OrderProducts.Where(x => x.OrderID = userorders.ID); //This code not work
        return View();
    }
如果你能把这段MSSQL代码转换成实体框架,那对我来说就足够了


感谢任何人的帮助,很抱歉我的英语不好。

要检索ID为1的客户的所有
订单产品,请尝试以下操作:

var orderProducts = db.OrderProduct
                      .Where(p => p.Orders.Any(o => o.Customers.Any(c => c.Id == 1)))
                      .ToList();
要仅检索ID,可以通过以下方式执行:

var productIds = db.OrderProduct
                      .Where(p => p.Orders.Any(o => o.Customers.Any(c => c.Id == 1)))                              
                      .Select(p => p.ProductId)
                      .ToList();

可以创建联接条件。此外,条件需要用两个等号表示,而不是一个。这应该起作用:

    List<OrderProduct> ürünler = (from c in db.Customers
      join o in db.Orders on c.ID equals o.CustomerID
      join op in db.OrderProducts on o.ID equals op.OrderID
      where c.ID == 1
      select op).ToList();
Listürünler=(来自db.Customers中的c)
在数据库中加入o。c.ID上的订单等于o.CustomerID
在o.ID等于op.OrderID的db.OrderProducts中加入op
其中c.ID==1
选择op.ToList();

谢谢您的帮助,但这只是订单产品列表。我需要订购单。我尝试了以下代码(我编辑了JanneP的代码。非常感谢JanneP):

列出产品=(来自数据库中的co.Customers
在数据库中加入o.Orders on co.ID等于o.CustomerID
在o.ID等于op.OrderID的db.OrderProducts中加入op
将p加入op.ProductID上的db.Products等于p.ID
其中co.ID==c.ID
选择p.ToList();
此代码查找一个客户订购的产品。它是有效的


感谢大家的帮助。

由于您的数据库已使用外键约束正确设置,Entity Framework将能够使用“导航属性”。这使您可以非常轻松地编写查询,如下所示

List<Product> products = db.Products.Where(e => e.OrderProduct.Orders.CustomerID == 1).ToList();
List products=db.products.Where(e=>e.OrderProduct.Orders.CustomerID==1.ToList();
在原始SQL中,您只需要产品ID。下面是你将如何做到这一点

List<int> productIds = db.Products.Where(e => e.OrderProduct.Orders.CustomerID == 1).Select(e => e.ID).ToList();
List productId=db.Products.Where(e=>e.OrderProduct.Orders.CustomerID==1)。选择(e=>e.ID.ToList();

对于熟悉SQL但不熟悉实体框架和Linq的人来说,一个有用的搜索词是“101个Linq示例”。

只需使用
Include
检索每个订单的产品即可

    List<Order> userorders= db.Orders.Include(a=>a.Product).Where(x => x.CustomerID == c.ID).ToList();
List userorders=db.Orders.Include(a=>a.Product).Where(x=>x.CustomerID==c.ID).ToList();
这将检索订单以及每个订单的产品


您可以更改Include以添加更多导航属性,我假设您在
Order
类中有
Product
属性,如果名称错误,您可以更改名称
class
显示
Order
OrderProduct
的定义
List<int> productIds = db.Products.Where(e => e.OrderProduct.Orders.CustomerID == 1).Select(e => e.ID).ToList();
    List<Order> userorders= db.Orders.Include(a=>a.Product).Where(x => x.CustomerID == c.ID).ToList();