我正试图找出一种方法,使用户可以在域的所有部分中搜索特定的文本或值。
例如,我有这些简化的类:
public class Person
{
public string FirstName {get; set;}
public string LastName {get; set;}
public string Password {get; set;} //just for this example it's a string
}
public class Company
{
public string CompanyName {get; set;}
public string PhoneNumber {get; set;}
}
public class Invoice
{
public decimal Revenue {get; set;}
public decimal TotalAmount {get; set;}
}
我希望能够为每个类注册用户可以搜索的字段。我不希望他们能够搜索属性密码和收入。他们可以在框中键入数量或一些文本,如果找到文本,它应该检查这些类的所有实例。
例如,“51”可能会在51,99时显示为TotalAmount,但我也可能会将其作为电话号码的一部分出现。
所以我的问题是,如何查看所有实体并检索可以使用反射搜索的属性?或者我创建一个带有表达式[]的方法来返回属性?
结果我想使用属性名为每个特定实体动态构建一个NHibernate QueryOver查询,并返回它为每个实体找到的项。
感谢您的帮助!
答案 0 :(得分:1)
您可以创建一个界面,例如ILookup,以确定哪些实体可供搜索。 稍后创建一个属性来标记哪些字段可用,然后迭代组件,您拥有所有实体并使用界面过滤它们。 像这样的东西
var q = from t in Assembly.GetExecutingAssembly().GetTypes()
where t.IsClass && t.Namespace == nspace && t is ILookup
select t;
答案 1 :(得分:0)
首先,您应该创建一个ViewModel,因为您不想公开域实体......永远。
我认为你要找的是LINQ查询.Contains()
Class library -> Dependencies -> Nuget -> Package