gpt4 book ai didi

c# - 按条件动态匹配两个集合

转载 作者:太空宇宙 更新时间:2023-11-03 13:29:37 24 4
gpt4 key购买 nike

我有一组过滤条件对象,每个条件都有一个名称(数据对象属性名称)和值属性。我有另一个集合(我的数据对象),我需要过滤这个集合以返回符合过滤条件的数据对象。属性是字符串值,所以不用担心类型。我该怎么做?

代码如下:

public class FilterCriteria
{
public string ColumnName { get; set; }

public string ColumnValue { get; set; }
}

public class DataObject
{
public string Name { get; set; }
}



public static void Match()
{
var criteria1 = new FilterCriteria() {ColumnName = "Name", ColumnValue = "abc"};
var criteria2 = new FilterCriteria() { ColumnName = "Name", ColumnValue = "xyz" };
var criteriaCollection = new List<FilterCriteria> {criteria1, criteria2};

var data1 = new DataObject() {Name = "xyz"};
var data2 = new DataObject() { Name = "abc" };
var data3 = new DataObject() { Name = "def" };
var dataCollection = new List<DataObject> {data1, data2, data3};

//filter datacollection by the criterias, match any data object with Name property equal to column value
//After the matching I will get the result as data1 & data2.
}

谢谢,-迈克

注意:FilterCriteria 将使用 xml 序列化序列化到磁盘。

最佳答案

要从存储在字符串中的名称中获取属性,您必须使用反射,例如:

DataObject someDataObject = ...;
typeof(DataObject).GetProperty("SomePropertyName").GetValue(someDataObject)

然后,将其与 LINQ 结合:

var filtered = dataCollection.Where(obj => 
criteriaCollection.Any(cond => obj.GetType()
.GetProperty(cond.ColumnName)
.GetValue(obj)
.Equals(cond.ColumnValue)))
.ToList();

关于c# - 按条件动态匹配两个集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21118014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com