2015-06-08 52 views
0

搜索我有一个表称为产品和所谓的产品描述表。 ProductDescription具有一个名为ProductDescriptionID的主键。所以,要获得产品的描述,我需要访问这两个表。实体框架 - 通过ID

这里是我的代码来访问一个产品的描述,但我不知道如何解决它,当我越来越:“lambda表达式无法转换为字符串,因为它不是一个委托类型”。

 productDetailsVM.ProductDescription = db.ProductDescriptions 
      .Where(c => c.ProductDescriptionID.Any(p => p.ProductID == id)) 
      .FirstOrDefault(); 

编辑:

public partial class Product 
    {  
     public int ProductID { get; set; } 
     etc 
    } 

    public partial class ProductDescription 
    { 
     public int ProductDescriptionID { get; set; } 

     public string Description { get; set; } 
    } 

实际上,我怎么写这个查询?

enter image description hereenter image description here

+0

你刚才不是问同样的问题在这里。 http://stackoverflow.com/questions/30699816/how-should-i-write-this-entity-framework-query – deathismyfriend

+0

没有非常相似,但是不同的问题,第一个得到解决。另外,不同的错误。 – user9993

+0

为什么不直接从产品开始?假设你对产品的导航性能:'productDetailsVM.ProductDescription = db.Products.Single(P => p.ProductID == ID).ProductDescription;' – DavidG

回答

0

惯于这样做呢?

productDetailsVM.ProductDescription = db.ProductDescriptions 
      .Where(c => c.ProductID == id) 
      .FirstOrDefault(); 
+0

“不包含”ProductID“的定义” – user9993

+0

嗯......你可以发布实体模型吗?您的企图有PD有ProductID ... – Mark

+0

需要查看实体之间的关系... – Mark

2

我猜你的数据库可能是新的,并且仍然在作品中,你还没有定义的产品和产品描述之间的关系(产品ID中的产品描述表的外键)。

一旦你的关系建立,并刷新您的EF图(你不使用代码首先假设),你将能够做到:

var productDescription = db.Product.FirstOrDefault(p=>p.ProductID == id).ProductDescription; 

这假定一个产品只有1个产品描述。

+0

这就是我要回答的问题,根据术语OP需求他的两个实体之间的导航属性 –

0

假设您希望产品具有单一描述,您必须将ProductId字段添加到ProductDescription表或ProductDescriptionID字段添加到Product表。 这就是所谓的实体分割,你可以找到这个方法here.

假设你想要一个产品有多个说明和描述多种产品(多对多),你需要一个“桥接表”,只有两个领域的视频(产品和描述IDS),符合此桥表的主键,这样你就在你的模型(多对多)关系,再有一个详细的视频here.