Linq 动态查询

如果是传统的应用程序开发,采取动态拼 Sql字符串的形式就可以解决了,但Linq代码是没办法间歇性判断而拼接.
首先UI上查询条件的项目往往并不确定,如上图目前有城市订单数目,将来可能有新的项目要增加,结果将导致代码频繁更改,对于这种情况无论是拼Sql时代,还是如今的Linq都不太容易应对,故而当有新的查询项目添进时,就多加一个查询条件。
另一个问题,当城市输入框为空时,那么对城市条件的限定则不应当加入Linq语句。
比如
string city = "";
Linq语句片段:where c.City.Contains(city);
当city为空时,上述片段不应该成为在Linq语句的一部分,这该怎么办呢? 总不能在Linq代码中间写 if(city != "")吧?!
真正的技巧很简单:
string city = queryItems.City;
int ordersCount = queryItems.OrdersCount;

var query = from c in dbContext.Customers
            where (String.IsNullOrEmpty(city) ? true : c.City.Contains(city))
               && (ordersCount == 0 ? true : c.Orders.Count > ordersCount)
            select c;
string queryString = query.ToString();
return query.ToList();

显而易见,在where子句中可以使用三元运算符进行条件判断:

    当条件不符合时返回一个true值,Linq在翻译为Sql语句时将忽略true;

    而条件符合时将返回预期的表达式语句。

 
 
 
 
 
 
 
posted @ 2012-05-04 15:13  罗霄(Sto)  阅读(331)  评论(0编辑  收藏  举报