c# – 在LINQ中使用字符串作为字段名称

看下面的代码我想用参数字段中接收的字段名替换USERNAME.这种方法必须能够对几个字段进行一些搜索.

谢谢,

public void Searching(string field,string stringToSearch)
{
    var res = 
        from user in _dataContext.USERs where 
        user.USERNAME.Contains(stringToSearch)
        select new 
        {
          Id = user.ID,Username = user.USERNAME
        };

}

解决方法

你需要忘记匿名类型,也许使用Tuple< int,string>代替;但是:怎么样:
IQueryable<Foo> source = // YOUR SOURCE HERE
      // in-memory dummy example:
      // source = new[] {
      //    new Foo {Id = 1,Bar = "abc"},//    new Foo {Id = 2,Bar = "def"}
      // }.AsQueryable();

string field = "Bar";
string stringToSearch = "d";
var param = Expression.Parameter(typeof (Foo),"x");
var predicate = Expression.Lambda<Func<Foo,bool>>(
    Expression.Call(
        Expression.PropertyOrField(param,field),"Contains",null,Expression.Constant(stringToSearch)
    ),param);
var projection = Expression.Lambda<Func<Foo,Tuple<int,string>>>(
    Expression.Call(typeof(Tuple),"Create",new[] {typeof(int),typeof(string)},Expression.PropertyOrField(param,"Id"),field)),param);
Tuple<int,string>[] data = source.Where(predicate).Select(projection).ToArray();

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...