【发布时间】:2013-11-19 02:07:31
【问题描述】:
我正在使用 C#、Entity Framework Code First 4.4.0.0 和 .NET Framework 4.0 开发一个库。
我有这个代码:
string[] keywords = null;
if (query_string != null)
keywords = query_string.Split(' ');
// Check parameter. It will throw an exception.
ParameterCheck.CheckObjectId(user_id);
// Convert parameter to int.
int userId = Int32.Parse(user_id);
try
{
using (var context = new AdnLineContext())
{
context.Configuration.ProxyCreationEnabled = false;
//IQueryable<User> query = context.Users;
IQueryable<User> query = context.Users.AsExpandable();
var predicate = PredicateBuilder.False<User>();
foreach (string keyword in keywords)
{
string temp = keyword;
predicate = predicate.Or(u => u.Name.Contains(temp) ||
u.State.Contains(temp) ||
u.HashTags.Contains(temp));
}
query.Where(predicate);
query.Include("WhoHasBlockedMe").Include("Friends");
var users = query.ToList();
[ ... ]
}
}
如果keywords = {"john", "happy"}我想得到这个SQL:
select * from users where
users.name like '%john%' or
users.state like '%john%' or
users.hashtags like '%john%' or
users.name like '%happy%' or
users.state like '%happy%' or
users.hashtags like '%happy%';
如何使用 PredicateBuilder 做到这一点?
对了,我已经从http://www.albahari.com/nutshell/predicatebuilder.aspx下载了LinqKit
更新
我在var users = query.ToList(); 添加了一个断点,query 有这个 SQL:
{SELECT
[Extent1].[UserId] AS [UserId],
[...]
FROM [dbo].[Users] AS [Extent1]}
它没有Where 子句。
【问题讨论】:
-
@pasty 不,这不会改变任何事情。
标签: c# linq entity-framework predicatebuilder