[英]Linq to Collection - Dynamic Where Clause
我有一个WPF应用程序,我想填充一个Treeview。 在发生这种情况之前,我希望用户能够从下拉列表中选择集合中可用的任何字段/属性,然后使用数据填充树并进行适当的分组。
示例对象
public class class_01{
public string Property_A {get; set;}
public string Property_B {get; set;}
public string Property_C {get; set;}
}
示例集合
List<class_01> list_01 = new List<class_01>();
同样,下拉列表将与列表中可用的属性绑定。 这样,如果列表在哪里更改了应用程序就不需要修改。 这是我需要答案的很大要求。
假设用户选择“ Property_A”。
我想要一个看起来像这样的linq查询方法。
Linq查询
public groupingModel getGrouping(string groupBy) // groupby equals property A in this example
{
List<class_01> list = getList(); //Returns the list of data of type class_01
var q = from x in w where ????? == groupBy select x; // I dont want to specify a specific property but rather have one applied dynamically
return q;
}
我有一个自定义对象,查询将被解析为该对象。 看起来类似于以下内容。
自订物件
public class class_02{
public string header {get; set;} // will be set to the discrete values of the selected groupby property
public List<class_01> prop_a {get; set;}
}
然后将其适当地绑定到树。
有什么想法吗?
编辑
另外,我将如何获得用户选择的属性的唯一值的列表。
例如
{a = 1,b = 2,c = 3},{a = 2,b = 3,c = 4}
如果用户决定对属性“ a”进行分组,我们将如何生成[1,2]的集合?
这将需要构造一个where子句。
foreach(value of user selected property){
string whereClause = string.format("{0} = {1}",selected property, value")
}
编辑-从动态查询中捕获异常
public List<groupingModel> getGrouping(string groupBy)
{
List<groupingModel> lgm = new List<groupingModel>();
//Categories.Select(c => c.Id).ToList()
var w2 = getWVWellsList();
//var v = w2.Select(groupBy).Distinct().Cast<string>().ToArray();
var v = w2.Select(groupBy).Distinct();
foreach(string val in v)
{
string whereClause = string.Format("{0} = {1}", groupBy, val);
try
{
IEnumerable<WVWellModel> q2 = w2.Where(whereClause);
List<WVWellModel> l = q2.ToList<WVWellModel>();
lgm.Add(new groupingModel { Header = val, Wells = l });
}
catch (Exception e)
{
MessageBox.Show(e.Message, "Query Error", MessageBoxButton.OK, MessageBoxImage.Error);
throw new Exception("Generic Exception - Issue With Group By Query", e);
}
}
return lgm;
}
异常 “类型为WVWellModel的属性或字段“科罗拉多州”不存在”
在此示例中,我可以确认我的where子句是“州=科罗拉多州”。 似乎查询正在应用该值,而不是属于该类型的属性状态。 就像在调用查询时将其反转一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.