我有以下linq查询:
Dim q = From definition In definitionList _
Where definition.ValueDefName.Contains(criteria) _
Select definition.ValueDefName, definition.ValueDefDesc, definition.DateCreated, _
definition.StrategicInitiative, definition.ValueWikiURL, definition.ValueDefinitionStatusID, _
definition.Aliaslist
我已经研究过这个答案:Dynamic WHERE clause in LINQ
不幸的是,它对我使用.net 4.0不起作用。当我尝试传递条件字符串时,请求谓词。最终目标是添加以下任何一项:
根据用户选择的复选框传递到查询中。如何在linq中创建动态where子句到sql?是否有新的语法将where子句作为字符串传递?
答案 0 :(得分:1)
对于LINQ to SQL,动态LINQ方法是将字符串作为Where子句传递的唯一选项。或者,Where子句采用表达式,您可以使用此方法动态构建表达式:http://msdn.microsoft.com/en-us/library/bb882637.aspx
我是使用Entity Framework完成的,我相信这也适用于LINQ to SQL。
HTH。
答案 1 :(得分:0)
不是100%确定这可以满足您的需求,但我们使用传递到搜索方法中的lambda表达式函数:
在我们的存储库类中:
public override IEnumerable<KeyCode> FindAll(Expression<Func<KeyCode, bool>> filter)
{
return GetAll().AsQueryable().Where(filter);
}
在其他地方
KeyCodeRepository keycodeRepository = new KeyCodeRepository(unitOfWork);
IEnumerable<KeyCode> keyCodes = keycodeRepository
.FindAll(k => k.FlowStatus.Value == (int)FlowStatusType.Active
&& k.AppSystem.Id == appSystemId);
表达式
k.FlowStatus.Value == (int)FlowStatusType.Active && k.AppSystem.Id == appSystemId
作为表达式传递给FindAll方法中的Where子句。这允许我们在调用FindAll();
的任何时候动态确定我们的过滤器