相关疑难解决方法(0)

如何从IQueryable获取where子句定义为接口

  class Program
{
    static void Main(string[] args)
    {
        var c = new SampleClass<ClassString>();
        c.ClassStrings.Add(new ClassString{ Name1 = "1", Name2 = "1"});
        c.ClassStrings.Add(new ClassString{ Name1 = "2", Name2 = "2"});

        var result = c.Query<ClassString>().Where(s => s.Name1.Equals("2"));

        Console.WriteLine(result);
        Console.ReadLine();
    }
}

public class ClassString
{
    public string Name1 { get; set; }
    public string Name2 { get; set; }
}



public interface ISampleQ
{
    IQueryable<T> Query<T>() where T: class , new();
}
public class SampleClass<X> : ISampleQ
{
    public List<X> ClassStrings { …
Run Code Online (Sandbox Code Playgroud)

c# linq lambda entity-framework expression-trees

4
推荐指数
1
解决办法
1712
查看次数

使用ExpressionVisitor获取所有"where"调用

我有一个查询,像这样:

var query = from sessions in dataSet
                    where (names.Contains(sessions.Username))
                    where (sessions.Login.TimeOfAction == dt)                    
                    select new {    sessions.Username, 
                                    sessions.Login, 
                                    sessions.Logout, sessions.Duration };
Run Code Online (Sandbox Code Playgroud)

我想实现一个ExpressionVisitor来提取where子句作为Lambda,但到目前为止只能使用一个名为'InnermostWhereFinder'的类来获得第一个,该类来自TerraServer Web服务的自定义查询提供程序上的MSDN教程.

它是:

internal class InnermostWhereFinder : ExpressionVisitor
    {
        private MethodCallExpression innermostWhereExpression;

        public MethodCallExpression GetInnermostWhere(Expression expression)
        {
            Visit(expression); 
            return innermostWhereExpression;
        }

        protected override Expression VisitMethodCall(MethodCallExpression expression)
        {
            if (expression.Method.Name == "Where")
                innermostWhereExpression = expression;

            Visit(expression.Arguments[0]);

            return expression;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我曾经尝试过大量调整这个类来返回两个没有成功的子句.找不到任何关于此的好文档,任何人都可以帮忙吗?我认为这最终需要产生多个可以使用的LambdaExpression对象.

c# linq lambda iqueryable expression-trees

3
推荐指数
1
解决办法
3376
查看次数