相关疑难解决方法(0)

如何创建表达式树来表示C#中的'String.Contains("term")'?

我刚刚开始使用表达式树,所以我希望这是有道理的.我正在尝试创建一个表达式树来表示:

t => t.SomeProperty.Contains("stringValue");
Run Code Online (Sandbox Code Playgroud)

到目前为止我有:

    private static Expression.Lambda<Func<string, bool>> GetContainsExpression<T>(string propertyName, string propertyValue)
    {
        var parameterExp = Expression.Parameter(typeof(T), "type");
        var propertyExp = Expression.Property(parameter, propertyName);
        var containsMethodExp = Expression.*SomeMemberReferenceFunction*("Contains", propertyExp) //this is where I got lost, obviously :)
        ...
        return Expression.Lambda<Func<string, bool>>(containsMethodExp, parameterExp); //then something like this
    }
Run Code Online (Sandbox Code Playgroud)

我只是不知道如何引用String.Contains()方法.

帮助赞赏.

.net c# lambda expression-trees

57
推荐指数
3
解决办法
3万
查看次数

在Entity Framework中创建动态linq排序和搜索顺序语句时

我正在尝试构建一个函数,以根据某些参数动态生成不同的查询.我对LINQ语法有点困惑,我不确定我是否做得对.

字符串类型参数的集合是"搜索"(对于搜索文本框值),"搜索字段"(要搜索的内容),"limit_begin","limit_end"表示行数和起始位置."order_by"为哪个字段排序."order_sort"以哪种方式排序.

我之前在stackoverflow上发现了这个'getpropertyvalue'反射函数,我希望它根据我自己的解释做我想要的.

 private static object GetPropertyValue(object obj, string property)
    {
        System.Reflection.PropertyInfo propertyInfo = obj.GetType().GetProperty(property);
        return propertyInfo.GetValue(obj, null);
    }
Run Code Online (Sandbox Code Playgroud)
if (order_sort == "ASC")
        {
            (from a in entities.UserTable
             where GetPropertyValue(a, searchfield).ToString().Contains(search)
             select a)
                .OrderBy("a." + order_by)
                .Skip(Convert.ToInt32(limit_begin))
                .Take(Convert.ToInt32(limit_end))
                .ToList();
        }
        else if (order_sort == "DESC")
        {
            (from a in entities.UserTable
             where GetPropertyValue(a, searchfield).ToString().Contains(search)
             select a)
                .OrderByDescending("a." + order_by)
                .Skip(Convert.ToInt32(limit_begin))
                .Take(Convert.ToInt32(limit_end))
                .ToList();
        }
Run Code Online (Sandbox Code Playgroud)

我在"Orderby"行上收到错误,而VS2008用红色突出显示错误,说明参数的类型无法从使用中推断出来.

c# linq asp.net entity-framework

2
推荐指数
1
解决办法
3924
查看次数

实体框架 where 子句从特定列过滤

我在使用 Entity Framework 6 时遇到问题,但不知道如何解决。我想使用 EntityFramework 从表中读取数据。目标是使用 where 子句读取该数据,该子句从特定列中过滤数据。我要搜索的列在方法参数中指定。

一个例子:我有一张人员表

姓名 地址 电子邮件
康纳 布莱恩 纽约 abc@abc.com
施瓦辛格 阿诺德 洛杉矶 abc@abc.com

通常我会选择这样的数据:

public List<Person> getData(string searchTerm)
{
    using (var db = new myDB())
    {
      return db.Person.Where(x=> x.Name == searchTerm).ToList();
    } 
}

Run Code Online (Sandbox Code Playgroud)

但我也希望能够灵活地处理我想要过滤的列。像这样的东西:

public getData(string columnToSearch, string searchTerm)
{
     using (var db = new myDB())
    {
      return db.Person.Where(columnToSearch == searchTerm).ToList();
    } 
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

我不想使用纯 SQL 并且无法编辑数据库。

感谢您的帮助。

c# linq entity-framework dynamic where-clause

2
推荐指数
1
解决办法
2359
查看次数