我是Entity Framework的新手,我对包含连接的查询有些麻烦。
这是我正在使用的模型:
http://img690.imageshack.us/img690/7132/modelow.png
我想查询所有模型,使用给定配置文件的启用信息(我从实例信息中获取)。 作为第一步,我试图在所有模型存在时使用启用的信息(左连接),但是失败了。我尝试了Join方法,但我甚至无法编译。
var modelList = dc.db.models.Join(dc.db.profile_model,
y => y.id,
s => s.models.id,
(y, s) => new Object( y.id, y.display, s.enabled, s.models, s.profiles )
))
关于这个函数的MSDN与intellisense给我的不一致,我对参数有麻烦。我认为前3个是好的(第二个表和要加入的2个键),但我无法正确获得最后一个。我怎么能得到一个包含模型和profile_model的所有字段的对象?
由于
<小时/> 更新
select m.*, p.enabled from models m
left join profile_model p on m.id = p.model_id
where p.profile_id =
(
select profile_id from instances where instances.display = 'PTXM11602'
)
or profile_id is null
如何使用e-f编写?
答案 0 :(得分:2)
如果我理解正确,您需要每个模型的模型列表,该模型的所有实例。当您正确设计模型并在数据库中具有所有正确的引用键时,您应该能够编写如下内容:
var models =
from model in db.models
where (
from pm in model.profile_models
from instance in pm.profile.instances
where instance.display == "PTXM11602").Any()
||
!model.profile_models.Any()
select model;
var results =
from pm in db.profile_models
where pm.profile.instances.Any(i => i.display == "PTXM11602")
where models.Contains(pm.model)
select new
{
Model = pm.model,
Enabled = pm.enabled
};
请阅读this MSDN forum以获取使用Entity Framework 3.5的Contains
方法。