本文介绍了C#中的LINQ根据属性名where子句中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

让我们说我有下面的类:

 公共类Person {    公共字符串名字{获得;组; }
    公共字符串姓{搞定;组; }
    公众诠释年龄{搞定;组; }
    公共字符串性别{搞定;组; }}

另外,我有以下的方法,我通过一个存储库接触到的人的数据。

 公开的IEnumerable<&人GT; getPeople(字符串searchField,串SEARCHTERM){    // _ repo.GetAll()返回的IEnumerable<&人GT;
    VAR模型= _repo.GetAll();    //这里需要逻辑过滤    回归模型;
}

正如你可以看到我获得两个参数的方法: searchField SEARCHTERM

searchField 是其价值将被用于过滤的字段名称。 SEARCHTERM 是将用于与retrived值的(对不起,如果我不清楚这里,但这是我能拿出最)

我通常会做的是如下:

 公开的IEnumerable<&人GT; getPeople(字符串searchField,串SEARCHTERM){    // _ repo.GetAll()返回的IEnumerable<&人GT;
    VAR模型= _repo.GetAll();    开关(searchField){        案名字:
            模型= model.Where(X => x.FirstName == SEARCHTERM);
            打破;        案姓:
            模型= model.Where(X => x.SurName == SEARCHTERM);
            打破;        //不断去
    }    回归模型;}

这会工作得很好。但是,如果我做我的类的变化,这code将有一个变化缺乏一些功能,打破或者,如果我增加新的属性这个类。

我所寻找的是类似如下:

model = model.Where(x => x.GetPropertyByName(searchField) == searchTerm);

Am I flying too high here if it is impossible or being complete idiot if there is already a built in way for this?

解决方案

Looks like you need Dynamic Linq queries:

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

这篇关于C#中的LINQ根据属性名where子句中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-03 03:23