Linq to SQL,在dbml设计器中(或其他方式)
我有3张桌子:
订单,交付和EmailTemplates。
订单包含许多交货,订单和交货具有状态(整数)字段。
EmailTemplates具有适用的状态和bool IsForDeliveries字段。
我在order.status == emailTemplate.status上有Linq to order for Order-> EmailTemplate,但是我想在关联上添加一个条件,使emailTemplate.IsForDeliveries == false。这是可能的,或者我只需要记得在我访问order.EmailTemplates时检查这种情况吗?
AssociateWith存在问题,因为我还需要对应的Delivery< - > EmailTemplate关联,该关联仅显示e.is_for_delivery == true的模板。
向类添加属性是有问题的,因为我希望这可以转换为SQL。
答案 0 :(得分:1)
You can use DataLoadOptions.AssociateWith()
for this或者只是在课堂上创建一个额外的属性。由于Order类是局部的,你可以在旁边创建一个方法,然后添加:
public IEnumerable<EmailTemplate> DeliveryEmailTemplates {
get { return EmailTemplates.Where(e => e.IsForDeliveries == false); }
}
或者,在创建datacontext时:
var dc = new DataContext();
var dlo = new DataLoadOptions();
dlo.AssociateWith<EmailTemplates>(o => o.EmailTemplates.Where(e => e.IsForDeliveries == false));
dc.LoadOptions = dlo;
var orders = from o in DB.Orders
where o.Id == 5
select o;
foreach(var o in orders) {
//o.EmailTemplates will contain only IsForDeliveries==false...
}
如果以静态方式获取DataContext,可以每次都添加它,例如我在DataContext的一个名为.New的部分类中添加一个方法:
public static DataContext New {
get {
var dc = new DataContext(MyConnectionString);
var dlo = new DataLoadOptions();
dlo.AssociateWith<EmailTemplates>(o => o.EmailTemplates.Where(e => e.IsForDeliveries == false));
dc.LoadOptions = dlo;
return dc;
}
}
然后使用:
var DB = DataContext.New;
var orders = from o in DB.Orders
where o.Id == 5
select o;