我需要多次调用相同的LINQ查询,这些查询在"where"子句中只有不同的元素。我不想一遍又一遍地重复LINQ查询,而是想将元素传递到单个查询中,但是我的大脑对如何做到这一点口吃。
现在我的基本LINQ查询看起来像这样:
return from a in _repository.GetApps()
join set in _repository.GetSettings() on a.id equals set.application_id
join type in _repository.GetSettingsTypes() on set.setting_type_id equals type.id
join ent in _repository.GetEntities() on a.entity_id equals ent.id
where ent.ROW_ID == app && set.application_id == id && (set.setting_type_id==81 || set.setting_type_id==82 || set.setting_type_id==83)
orderby set.application_id, type.ordinal
select new Settings { app_name = a.name, data_type = type.data_type, setting_name = type.name, setting_description = type.description, setting_value = set.setting_value, entity_name = ent.name, entity_num = ent.ROW_ID };
where子句仅按id列出设置类型。其他调用将简单地用或多或少的设置id替换"where"子句,然后返回到视图。我如何动态地替换"where"子句或设置id ?我可以简单地将一个字符串或数组赋值给第二个"&&"后面的设置列表吗?(这似乎不起作用)?或者lambda在这里会有帮助吗(我也不能让它工作)?谢谢!
您可以将数组与Contains()
查询结合使用:
var settingTypeIds = new[] { 81, 82, 83 };
return from a in _repository.GetApps()
..
where ent.ROW_ID == app
&& set.application_id == id
&& settingTypeIds.Contains(set.setting_type_id)
必须使用Query语法吗?可以使用LINQ扩展方法并将不同的lambda表达式传递到Where方法中吗?