在LINQ 2实体中加入字符串

时间:2012-09-07 17:54:57

标签: c# linq-to-entities expression-trees

我想在LINQ 2 Entity中加入字符串(在SQL服务器端)。

鉴于LINQ 2实体无法转换聚合函数,它甚至可能吗?

(顺便说一句,我只是不明白为什么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实体中完成连接字符串任务(在SQL服务器端)?

0 个答案:

没有答案