我尝试使用此处提供的建议在linq中使用In运算符但是,我无法将我的需求转换为LINQ语句。
以下是我需要转换为Linq的SQL查询
select *
from navigator_user_field_property
where user_id = 'albert'
and field_id in (
select field_id
from navigator_entity_field_master
where entity_id = 1
and use_type = 0)
order by field_id
我希望将其转换为高效的Linq。
大多数答案都处理了预定的字符串数组列表,这在我的情况下不起作用。
由于
答案 0 :(得分:2)
看起来像是对我的加入:
var query = from navigator in db.NavigatorUserFieldProperties
where navigator.UserId == "albert"
join field in db.NavigatorEntityFieldMasters
.Where(f => f.EntityId == 1 && f.UseType == 0)
on navigator.FieldId equals field.FieldId
select navigator;
请注意,如果有多个具有相同ID的字段,这将多次返回相同的值 - 但我怀疑情况并非如此。
你可以做一个更直接的翻译:
var query = from navigator in db.NavigatorUserFieldProperties
where navigator.UserId == "albert" &&
db.NavigatorEntityFieldMasters
.Where(f => f.EntityId == 1 && f.UseType == 0)
.select(f => f.FieldId)
.Contains(navigator.FieldId)
select navigator;
...并且可能最终转换为相同的SQL ...但我个人会加入。
答案 1 :(得分:1)
这是一个高效且可读的LINQ查询:
var fields =
from field in db.navigator_entity_field_masters
where field.entity_id == 1 && field.user_type == 0
select field;
var properties =
from property in db.navigator_user_field_properties
where property.user_id == "albert"
where fields.Contains(property.field)
select property;
看妈妈!!没有连接; - )