我有一个WPF应用程序,我想填充一个treeview。在这种情况发生之前,我希望用户能够从下拉列表中选择集合中可用的任何字段/属性,然后使用数据填充树并进行适当分组。Linq to Collection - Dynamic Where子句
例子中的物体
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}
如果用户决定基上属性“一个“我们将如何产生[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子句是“State = Colorado”。看起来查询正在应用该值,而不是属于该类型的属性状态。它就好像在查询被调用时被颠倒过来一样。
阿哈的帖子!这非常方便。你会如何建议我为动态查询生成一个可能的值列表?或者有没有办法在图书馆处理?我编辑了我的问题以包含该步骤。感谢您输入@Tito。 – LCaraway
我编辑了我的问题以使用动态Linq查询。我建立一个字符串where子句,虽然我面临一些问题。抛出异常,指示正在应用错误的字符串属性。 – LCaraway