首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

Entity Framework 多对多查询不会写解决方案

2012-12-31 
Entity Framework 多对多查询不会写现在要找出价格小于80的所有的订过的客户名称:SELECTOrders.UserNameFR

Entity Framework 多对多查询不会写
Entity Framework 多对多查询不会写解决方案
Entity Framework 多对多查询不会写解决方案

现在要找出价格小于80的所有的订过的客户名称:
SELECT   Orders.UserName
FROM      OrderLine LEFT OUTER JOIN
                Orders ON OrderLine.OrderID = Orders.OrderID LEFT OUTER JOIN
                Products ON OrderLine.ProductID = Products.ProductID
WHERE   (Products.Price < 80)

但是怎么写entity 查询呢?

var query = en.Products.Where(p=>p.Price < 80) ?? 后面怎么接啊?
[解决办法]
我觉得Orderline也要映射吧。
[解决办法]


var query=from u in en.Products select u.OrderLine.Orders.UserName

[解决办法]
Orderline 不要使用联合主键
用这样的结构: 
Id <PK>
ProductID <FK>
OrderID   <FK>


var query=from ol in OrderLine
          join o in Orders
          on ol.OrderID equals o.OrderID into left1
          from o in left1.DefalutIfEmpty()
          join p in Products
          on ol.ProductID equlas p.ProductID into left2
          from p in left2.DefalutIfEmpty()
          where p.price<80
          select o==null?"":o.UserName;

[解决办法]
下面的代码OrderItems相当于你的OrderLine. Where你可以自行修改。

OrderItems 也被映射进来了。


           var query = from oi in context.OrderItems
                       join o in context.Orders on oi.OrderId equals o.OrderId
                       join p in context.Products on oi.ProductId equals p.ProductId
                       where p.ProductId == 310
                       select o;

[解决办法]
视图,存储过程。EF都支持导入。

你这个查询是不是有关系?

order,product与orderitems(你的orderline)都是左链接?

那也就意味着,用户下的订单里有可能出现一件你网站上根本就不存在的商品。
这样的数据完整吗?
[解决办法]
最好还是有一个OrderLineID,作为Primary Key吧。


[解决办法]
多对多肯定要用中间表的。

热点排行