课程的“搜索引擎”

时间:2018-06-10 00:23:50

标签: c# reflection lambda queryover

我正试图找出一种方法,使用户可以在域的所有部分中搜索特定的文本或值。

例如,我有这些简化的类:

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查询,并返回它为每个实体找到的项。

感谢您的帮助!

2 个答案:

答案 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