我正在尝试使用http://www.albahari.com/nutshell/predicatebuilder.aspx 中的PredicateBuilder 在运行时动态创建 linq 表达式。
我目前有一个方法,它接受一个标准对象列表,然后将它们解析成多个谓词,就像这篇文章中描述的那样。
所以目前,我的代码支持以下场景:
WHERE
((a == <val1>) AND (b == <val2>) AND (c == <val3>))
OR
((a == <val4>) AND (b == <val2>) AND (c == <val3>))
Run Code Online (Sandbox Code Playgroud)
但我需要它像这样工作:
WHERE
((a == <val1> OR a == <val4>) AND (b == <val2>) AND (c == <val3>))
OR
((a == <val7>) AND (b == <val5>) AND (c == <val6>))
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点,以便我可以将两个“OR”“组合”在一起,以便逻辑正确流动?我不想要“a OR a AND b AND c”,我需要“(a OR a) AND b and C”。
我有一个表格,如下所示:
[ID, Name]
1, Bob
1, Joe
1, Joe
1, Bob
Run Code Online (Sandbox Code Playgroud)
我想检索一个记录列表,显示具有相同ID的记录之间的关系.例如,我想从我的查询中得到以下结果集:
Bob, Joe
Joe, Bob
Bob, Bob
Joe, Joe
Run Code Online (Sandbox Code Playgroud)
这向我展示了表中每个项目的"from"和"to".
我可以使用以下查询获得此结果:
SELECT DISTINCT [NAME]
FROM TABLE A
INNER JOIN TABLE B ON A.ID = B.ID
Run Code Online (Sandbox Code Playgroud)
反正我有没有在select语句中使用"distinct"来实现相同的结果集?如果我不包括distinct,我会得到16条记录,而不是4条记录.
我正在使用实体框架来检索大型数据集.
数据集集具有父/子关系,我需要在父节点的同时恢复子信息.
我发现的是,EF最初发送一个查询以获取父对象列表,然后遍历每个父对象并向DB查询子信息.
因此,如果我有1000个父对象,我最终会对DB进行总共1001次调用(每个父对象一次,加上获取父项列表的原始查询).
无论如何都要使EF查询这是一种更有效的方式吗?就像是:
SELECT * FROM CHILD_OBJECT_TABLE WHERE PARENTID IN (LIST OF PARENT_IDS HERE)
Run Code Online (Sandbox Code Playgroud) 我试图用contains运算符动态创建一个linq表达式.
在阅读了与此主题相关的几篇帖子后,我提出了以下代码,允许我执行"包含"评估:
internal static Expression<Func<TEntity, bool>> StringContains<TEntity>(string propertyName, string subString)
{
MethodInfo contains = typeof(JsonLinqParser_Paser).GetMethod("Like");
var param = Expression.Parameter(typeof(TEntity));
var body = Expression.Call(contains, Expression.Property(param, propertyName), Expression.Constant(subString, typeof(string)));
var lambda = Expression.Lambda<Func<TEntity, bool>>(body, param);
return lambda;
}
public static bool Like(string a, string b)
{
return a.Contains(b);
}
Run Code Online (Sandbox Code Playgroud)
这就是这样称呼的:
var expression = Expression.Lambda<Func<TEntity, bool>>(StringContains<TEntity>("FIPSCO_STR", _myStringValue), param);
Run Code Online (Sandbox Code Playgroud)
但是,在运行时,我收到如下错误:
类型'System.Func`2 [DAL.BestAvailableFIP,System.Boolean]'的表达式不能用于返回类型'System.Boolean'
其中"DAL.BestAvailableFIP"是"TEntity"类型.
我确信这与我对lambda表达式缺乏了解有关.谁能告诉我我做错了什么?
我只是想确定Raven DB使用的文件系统上的文件是否加密?有人可以直接打开文件系统上的文件并直接将它们从二进制转换为ASCII,还是加密?
我试图说服我们的管理层给RavenDB一个机会,但他们担心安全问题.他们给出的示例是,您不能只打开MS SQL db文件,将其从二进制转换为ASCII,然后读取它.所以我试图验证RavenDB是否也阻止了这种事情?
我不是一个真正的大型TSSQL专家.我们有一个返回近200万条记录的查询.运行需要2.5分钟.我们已经添加了索引,并且削减了一分钟(过去需要3.5分钟才能运行),但2.5分钟仍然太慢.谁能告诉我如何修改此查询以提高其性能?我怀疑在"in"语句中会发生更改,并且计算"LOCATION"值的方式,但我不确定如何去做.
select distinct
A.ptid,
A.ptmgrx,
A.ptmgry,
A.fename,
B.fename XFENAME,
A.rt1 route,
A.pr,
A.mp,
A.rdbranch,
A.gs grade,
A.cs,
A.csmp,
A.cspath,
(select distinct twpname from tamc.dbo.fipsmdot where fipscode = A.fmcdl) + '; ' +
(select distinct county from tamc.dbo.fipsmdot where fipsco = A.countyl) + ' County, ' +
(select distinct twpname from tamc.dbo.fipsmdot where fipscode = A.fmcdr) + '; ' +
(select distinct county from tamc.dbo.fipsmdot where fipsco = A.countyr) + ' County' LOCATION
from intersectionApproaches A INNER JOIN intersectionApproaches B ON …Run Code Online (Sandbox Code Playgroud) 我试图将List<string>一个方法传递给它,并使用它来创建一个在实体框架查询中使用的include语句列表.
例如:
List<string> myIncludes = new List<string>();
myIncludes.Add("myObject.FirstRelatedObject");
myIncludes.Add("myObject.SecondRelatedObject");
Run Code Online (Sandbox Code Playgroud)
我想使用这个列表来获得类似下面的内容:dyamically:
var myQry = objectContext.object.Include(myIncludes[0]).Include(myIncludes[1]);
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?我使用predicateBuilder来生成语句的"where"部分,但我认为这与"Include"部分不同.
在以下代码中:
function doStuffA() {
// DO SOME THINGS
doStuffB();
// DO SOME MORE THINGS
}
function doStuffB() {
// DO B THINGS
}
doStuffA();
Run Code Online (Sandbox Code Playgroud)
代码执行的顺序是什么?
是吗:
1. DO SOME THINGS
2. DO B THINGS
3. DO SOME MORE THINGS
Run Code Online (Sandbox Code Playgroud)
要么:
1. DO SOME THINGS
2. DO B THINGS & DO SOME MORE THINGS - AT THE SAME TIME
Run Code Online (Sandbox Code Playgroud) sql ×3
c# ×2
performance ×2
distinct ×1
encryption ×1
javascript ×1
lambda ×1
linq ×1
predicate ×1
ravendb ×1