我正在使用LINQ to SQL查询并遇到了一个问题,我有4个可选字段来过滤数据结果.通过可选,我的意思是可以选择输入值.具体来说,一些文本框可能有一个值或有一个空字符串和一些下拉列表可能已选择或可能没有...
例如:
using (TagsModelDataContext db = new TagsModelDataContext())
{
var query = from tags in db.TagsHeaders
where tags.CST.Equals(this.SelectedCust.CustCode.ToUpper())
&& Utility.GetDate(DateTime.Parse(this.txtOrderDateFrom.Text)) <= tags.ORDDTE
&& Utility.GetDate(DateTime.Parse(this.txtOrderDateTo.Text)) >= tags.ORDDTE
select tags;
this.Results = query.ToADOTable(rec => new object[] { query });
}
Run Code Online (Sandbox Code Playgroud)
现在我需要添加以下字段/过滤器,但前提是它们是由用户提供的.
我已经拥有的查询工作得很好,但要完成该功能,需要能够在where子句中添加这4个其他项,只是不知道如何!
实体框架不支持Expression.Invoke
运营商.尝试使用它时收到以下异常:
"LINQ to Entities不支持LINQ表达式节点类型'Invoke'.
有没有人有这个缺少功能的解决方法?我想用详细的PredicateBuilder 这里的实体框架上下文.
编辑1 @marxidad - 我喜欢你的建议,但它确实让我感到困惑.您能就您提出的解决方案提供进一步的建议吗?
编辑2 @marxidad - 感谢您的澄清.
可能重复:
条件Linq查询
使用Entity Framework 4.0
我有这样的搜索条件
有四个字段允许用户过滤搜索.条件都是AND
.如果文本框值为String.Empty
或者下拉列表值为全部,则结果必须省略相应的过滤器.可以在存储过程中执行此操作,但我无法在Linq2SQL/Entity Framework方案中模仿这一点.
我的问题是这个,如何在Linq中根据一些输入值省略IEnumerable.Where?
我正在研究的一个项目涉及重构一个C#Com对象,它作为一些Sql 2005数据库的数据库访问层.
现有代码的作者使用字符串和许多if语句手动构建了所有sql查询,以构造相当复杂的sql语句(~10个连接,> 10个子选择,~15-25 where条件和GroupBy).基表始终是相同的,但连接,条件和分组的结构取决于传递给我的类/方法的一组参数.
像这样构建sql查询确实有效,但它显然不是一个非常优雅的解决方案(而且很难阅读/理解和维护)...我可以自己写一个简单的"querybuilder",但我很确定我不是第一个遇到这种问题的人,因此我的问题是:
在搜索linq条件where子句时,我发现了这篇文章,他们使用的方式如下:
var logs = from log in context.Logs
select log;
if (filterBySeverity)
logs = logs.Where(p => p.Severity == severity);
if (filterByUser)
logs = logs.Where(p => p.User == user);
Run Code Online (Sandbox Code Playgroud)
但我想知道这种方法有效吗?linq会执行多少次查询?
基本上我想在我的linq to sql语句中有一个if-else语句.
var query = from d in database
if(x == y) {
where d.Attr = x
}
else {
where d.Attr = y
}
select d;
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我有一种情况,我可能想按订单号或名称搜索.我知道我可以Where
为我的LINQ查询添加一个表达式,但我只想为我正在搜索的属性添加它!我不知道在调用方法之前会提供哪个参数,那么如何添加正确的条件呢?
public JsonResult Search(int orderNo=0, string firstName="", string lastName="")
{
if (orderNo >0){
//add Condition
}
if (firstName.Length > 0){
//add Condition
}
if (lastName.Length > 0){
//add Condition
}
//get Result
var result = Repository.Orders.Where(???).OrderByDescending(e=> e.orderNo);
//return
}
Run Code Online (Sandbox Code Playgroud) c# ×5
linq ×5
asp.net ×3
linq-to-sql ×3
.net ×1
.net-3.5 ×1
asp.net-mvc ×1
sql ×1
sql-server ×1
where-clause ×1