var query_loc = (from at in db.amenities_types
join a in db.amenities on at.id equals a.amenities_type
join u in db.unitInfos on a.unit_id equals u.id
join l in db.locations on u.locations_id equals l.id
join o in db.organizations on l.organization_id equals o.id
join ot in db.organization_types on o.id equals ot.organization_id
where (((u.price >= low_rent) && (u.price <= high_rent))
|| (u.price == null))
&& (u.bedrooms <= beds) && (u.bathrooms <= baths)
&& amenities_list.Contains(at.id)
&& (((ot.active == true) && (DateTime.Now <= ot.deactivateDate))
|| ((ot.active == true) && (ot.deactivateDate == null)))
&& (((l.active == true) && (DateTime.Now <= l.deactivateDate))
|| ((l.active == true) && (l.deactivateDate == null)) )
&& (ot.type == 8)
orderby o.name ascending, l.name ascending
select new { l, o, u, ot, at });
我需要替换的具体行是
,其中 amenities_list.Contains(at.id)
相反,它需要像这样生成SQL([at.id] = 29 AND [at.id] = 30 AND [at.id] = 40)
那么如何让我的List在LINQ to SQL中生成上述SQL代码。
答案 0 :(得分:0)
请为你的条款创建方法,你吓到我了。
var query_loc = (from at in db.amenities_types
join a in db.amenities on at.id equals a.amenities_type
join u in db.unitInfos on a.unit_id equals u.id
join l in db.locations on u.locations_id equals l.id
join o in db.organizations on l.organization_id equals o.id
join ot in db.organization_types on o.id equals ot.organization_id
where
PriceIsValid(u)
&& BedsAndBathsArevalid(u)
&& AtIdIsValid(at.id)
&& SomeCrazyDateConditionIsValid(ot, l)
&& TheOtTypeIsValid(ot)
orderby o.name ascending, l.name ascending
select new { l, o, u, ot, at });
如果你的意思是at.is = 29或at.id = 30或at.id = 40,那么使用AtIdIsValid(at.id)谓词,如:
bool AtIdIsValid(int atId){ return (atId == 29 || atId == 30 || atId == 40); }