如何将一个导航 属性 与基于另一个 属性 值的不同 table 相关联?
How to relate one Navigation property to different table based on another property value?
我有一个特别的要求。
我正在使用没有关系的现有数据库,我无法更改数据库结构或 tables,所以我仅通过 EntityFramework.
使用关系
我有三个 tables :
public class Repairs
{
public int Id {get; set;}
//[more properties...]
public int IDCategory{ get; set; }
public int IDModel{ get; set; }
//[more properties...]
//Navigation Properties
public Category {get; set;}
}
public class Service
{
public int Id {get; set;}
public string Code {get; set;}
public string Description {get;set;}
}
public class Category
{
public int Id {get; set;}
public string Name {get; set;}
}
其实业务逻辑是:
- If IDModel==0 Then IDCategory 的值是指 Servicetable
- If IDModel >0 Then IDCategory 的值是指 Categorytable.
问题是:如何将此业务逻辑转换为 EntityFramework(请参阅上面的 ssql 示例)?
注意:名称和结构是近似值。
编辑使用示例:
我不能用 entity framework 做一个例子,因为,好吧,这正是我在这里问的,而且我对 C# 比较陌生,所以不能真正帮助这种方式。
但是我可以 post 我的实际 SSQL 代码来执行该业务逻辑 :
SELECT
CASE reps.idModel
WHEN 0 THEN ser.code+ ' - ' + ser.description
ELSE cat.name
END as 'Product'
FROM Repairs reps
LEFT OUTER JOIN Service ser on ser.id=reps.IDCategory
LEFT OUTER JOIN Category cat on cat.id=reps.IDCategory
希望对您有所帮助!
感谢大家愿意教我如何解决这个问题!
根据更新,此查询的编写方式与 SQL 完全相同。除非您定义适当的导航属性,这可以简化查询并删除显式连接。
var query =
from reps in ctx.Repairs
join ser in ctx.Service on reps.IDCategory equals ser.Id into sj
from ser in sj.DefaultIfEmpty()
join cat in ctx.Category on reps.IDCategory equals cat.Id into cj
from cat in cj.DefaultIfEmpty()
select new
{
Product = reps.IDModel == 0 ? ser.Code + " - " + ser.Description : cat.Name
};
我有一个特别的要求。 我正在使用没有关系的现有数据库,我无法更改数据库结构或 tables,所以我仅通过 EntityFramework.
使用关系我有三个 tables :
public class Repairs
{
public int Id {get; set;}
//[more properties...]
public int IDCategory{ get; set; }
public int IDModel{ get; set; }
//[more properties...]
//Navigation Properties
public Category {get; set;}
}
public class Service
{
public int Id {get; set;}
public string Code {get; set;}
public string Description {get;set;}
}
public class Category
{
public int Id {get; set;}
public string Name {get; set;}
}
其实业务逻辑是:
- If IDModel==0 Then IDCategory 的值是指 Servicetable
- If IDModel >0 Then IDCategory 的值是指 Categorytable.
问题是:如何将此业务逻辑转换为 EntityFramework(请参阅上面的 ssql 示例)?
注意:名称和结构是近似值。
编辑使用示例: 我不能用 entity framework 做一个例子,因为,好吧,这正是我在这里问的,而且我对 C# 比较陌生,所以不能真正帮助这种方式。 但是我可以 post 我的实际 SSQL 代码来执行该业务逻辑 :
SELECT
CASE reps.idModel
WHEN 0 THEN ser.code+ ' - ' + ser.description
ELSE cat.name
END as 'Product'
FROM Repairs reps
LEFT OUTER JOIN Service ser on ser.id=reps.IDCategory
LEFT OUTER JOIN Category cat on cat.id=reps.IDCategory
希望对您有所帮助!
感谢大家愿意教我如何解决这个问题!
根据更新,此查询的编写方式与 SQL 完全相同。除非您定义适当的导航属性,这可以简化查询并删除显式连接。
var query =
from reps in ctx.Repairs
join ser in ctx.Service on reps.IDCategory equals ser.Id into sj
from ser in sj.DefaultIfEmpty()
join cat in ctx.Category on reps.IDCategory equals cat.Id into cj
from cat in cj.DefaultIfEmpty()
select new
{
Product = reps.IDModel == 0 ? ser.Code + " - " + ser.Description : cat.Name
};