我想在 LINQ 2 实体中加入字符串(在 SQL 服务器端)。
考虑到 LINQ 2 Entity 无法转换 Aggregate 函数这一事实,是否有可能?
(顺便说一句,我只是不明白为什么 L2S 支持聚合函数但 LINQ 2 实体不支持)
我试图生成一个表达式树来做到这一点,这就是我想出的:
ParameterExpression list = Expression.Parameter(typeof(List<string>), "list");
ParameterExpression i = Expression.Parameter(typeof(int), "i");
ParameterExpression result = Expression.Parameter(typeof(string), "r");
LabelTarget label = Expression.Label(typeof(string));
BlockExpression block = Expression.Block
(
new[] { i, result },
Expression.Assign(result, Expression.Property(list, "Item", Expression.Constant(0))),
Expression.Assign(i, Expression.Constant(0)),
Expression.Loop
(
Expression.IfThenElse
(
Expression.LessThan
(
Expression.PreIncrementAssign(i),
Expression.Property(list, "Count")
),
Expression.Assign
(
result,
Expression.Call
(
null,
typeof(string).GetMethod
(
"Concat",
new Type[]
{
typeof(string),
typeof(string),
typeof(string)
}
),
new Expression[]
{
result,
Expression.Constant(","),
Expression.Property(list, "Item", i)
}
)
),
Expression.Break(label, result)
),
label
)
);
var join = Expression.Lambda<Func<List<string>, string>>(block, list);
Response.Write(join.Compile()(new List<string> { "a", "b", "c" }));
这对 很有用List<string>
,我得到结果“a,b,c”。
但我不知道如何将此代码应用于IQueryable<string>
.
IQueryable<string>
没有“Item”属性,甚至有一种方法可以通过 IQueryable 上的索引获取元素,这如何转换为 SQL ?
那么,有没有办法在 LINQ 2 Entity 中完成连接字符串任务(在 SQL 服务器端)?