通过具有字符串属性列表的对象过滤列表

时间:2016-07-15 10:04:40

标签: c# entity-framework

   public class AlldataPoints
  {
    public int phase{ get; set; }
    public string recr{ get; set; }
    public string study{ get; set; }
  }


public class filter
{
    public List<string> Phase;
    public List<string> recr;
    public List<string> study;

}

我有一份上述课程清单,上面写着Alldatapoints&#39; lst&#39;和类过滤器的对象&#39; obj&#39;。

我想只过滤那些&#39; lst&#39;其中的阶段值在&#39; obj&#39;匹配&#39; lst&#39; &#39;相&#39; &#39; recr&#39;和值在&#39; obj&#39;匹配&#39; recr&#39;在&#39; lst&#39; &#39; RECR&#39 ;.我想使用实体表达式。

3 个答案:

答案 0 :(得分:1)

在过滤器参数列表中使用AddPolygon(PointList.ToArray())

Types

答案 1 :(得分:0)

你走了:

public List<AlldataPoints> FilterPoinst(List<AlldataPoints> points, filter filter)
{
    return points.Where(x => filter.Phase.Contains(x.phase)
        && filter.recr.Contains(x.recr)
        && filter.study.Contains(x.study)).ToList();
}

如果您需要匹配一个属性,则只需将&&替换为||运算符:

在您的代码中只需调用此函数:

var filter = new filter(); //init your filter
List<AlldataPoints> points = new List<AlldataPoints>(); // Here you should get your points
var filteredPoints = FilterPoinst(points, yourFilter); //you get your filtered points.

答案 2 :(得分:0)

如果这是针对您的DbContext的Linq-to-Entities查询,您仍然可以使用Contains()检查每个值是否在每个相应的列表中。

尴尬的是,您需要将phase转换为字符串,因为它是int且列表是List<string>,但您不能只使用ToString() },您必须使用SqlFunctions.StringConvert() - 请参阅this answer

dbContext.AllDataPoints.Where(adp =>
    filter.Phase.Contains(SqlFunctions.StringConvert((double)adp.phase).Trim())
    && filter.recr.Contains(adp.recr)
    // && filter.study.Contains(adp.study)
)