类
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 ;.我想使用实体表达式。
答案 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)
)