0

我想在 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 服务器端)?

4

0 回答 0