我刚刚开始使用表达式树,所以我希望这是有道理的.我正在尝试创建一个表达式树来表示:
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()方法.
帮助赞赏.
我正在尝试构建一个函数,以根据某些参数动态生成不同的查询.我对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用红色突出显示错误,说明参数的类型无法从使用中推断出来.
我在使用 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 并且无法编辑数据库。
感谢您的帮助。