我正在使用PredicateBuilder,这意味着我正在使用AsExpandable扩展方法.问题是我无法再跟踪我的SQL查询,因为当我尝试将查询强制转换为ObjectQuery时会抛出以下错误,以便我可以对它执行ObjectQuery.ToTraceString()调用...
无法将类型为"LinqKit.ExpandableQuery`1 [Genesis.Person]"的对象强制转换为"System.Data.Objects.ObjectQuery".
有任何想法吗?
我在一个单独的C#项目中重新创建了Predicatebuilder类,我试图在VB.NET项目中使用它但是我一直收到以下错误:
重载决策失败,因为没有可访问的"或"接受此数量的参数.
当我像这样使用它时:
Dim predicate = PredicateBuilder.False(Of t_Quote)()
predicate = predicate.Or(Function(q) q.iQuoteType = iQuoteType)
Run Code Online (Sandbox Code Playgroud)
引用了relivant项目,我正在使用正确的import语句,它都编译没有任何错误.
知道我哪里错了吗?
这是我正在使用的C#中的PredicateBuilder类:
public static class PredicateBuilder {public static Expression> True(){return f => true; public static Expression> False(){return f => false; }
Run Code Online (Sandbox Code Playgroud)public static Expression<Func<T, bool>> Or<T>(this
Expression> expr1,Expression> expr2){var invokedExpr = Expression.Invoke(expr2,expr1.Parameters.Cast()); 返回Expression.Lambda>(Expression.OrElse(expr1.Body,invokedExpr),expr1.Parameters); }
Run Code Online (Sandbox Code Playgroud)public static Expression<Func<T, bool>> And<T>(this
Expression> expr1,Expression> expr2){var invokedExpr = Expression.Invoke(expr2,expr1.Parameters.Cast()); 返回Expression.Lambda>(Expression.AndAlso(expr1.Body,invokedExpr),expr1.Parameters); }}
假设您正在使用两个布尔属性A和B搜索某个对象.
如果你有两个linq查询怎么办:
IQueryable<ObjectType> query = getIQueryableSomehow()
query.Where(x => x.A);
IQueryable<ObjectType> query2 = getIQueryableSomehow()
query2.Where(x => x.B);
Run Code Online (Sandbox Code Playgroud)
如何将这些查询加在一起,以便它们与此相同?:
IQueryable<ObjectType> query3 = getIQueryableSomehow()
query3.Where(x => x.A || x.B)
Run Code Online (Sandbox Code Playgroud)
我想使用query3 = query.Union(query2),但遗憾的是我的Linq提供者联盟不受支持.
我通过链接where子句来分割x => xA && xB的情况.这就是我的意思:
IQueryable<ObjectType> query = getIQueryableSomehow();
query = query.Where(x => x.A);
query = query.Where(x => x.B);
Run Code Online (Sandbox Code Playgroud)
这个或案例是否有类似的解决方法?
谢谢,
艾萨克
我正在使用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) || …
Run Code Online (Sandbox Code Playgroud) 我有以下声明.
var search = PredicateBuilder.True<SomeType>();
search.And(f => false);
// Still the "search" variable value is: {f => true}.
Run Code Online (Sandbox Code Playgroud)
起初,我正在尝试表达; 没有成功,所以我尝试了这个"假".不管我做了什么,它仍然是一样的.怎么了?
我正在使用谓词构建器类,我需要在字符串数组上调用contains方法,因此在下面的代码而不是radio中我会传入一个字符串数组:
wherePredicate = wherePredicate.Or(m => m.MediaType.Contains("Radio"));
Run Code Online (Sandbox Code Playgroud)
完整的代码部分:
if (param.iMediaGroupID > 0)
{
var wherePredicate = PredicateBuilder.False<MediaChannelModel>();
var ss = new NeptuneRepository<Lookup_MediaTypes>();
var mediagroups = ss.FindWhere(m => m.MediaGroupID == param.iMediaGroupID).Select(m => m.Name);
//problem area
wherePredicate = wherePredicate.Or(m => mediagroups.Contains(m.MediaType));
predicate = predicate.And(wherePredicate);
}
Run Code Online (Sandbox Code Playgroud)
mediaGroups
是: ["Radio","Tv","Magazine"]
如果m.MediaType
是这些值中的任何一个,则谓词为真.
有没有办法在C#中做到这一点?