«Поисковая система» для занятий - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь найти способ, позволяющий пользователям выполнять поиск определенного текста или значения во всех частях домена.

Например, у меня есть эти упрощенные классы:

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» может появиться как TotalAmount, когда это 51,99, но яможет также появиться как часть телефонного номера.

Итак, мой вопрос: как мне просмотреть все объекты и получить свойства, доступные для поиска с отражением?Или я создаю метод с выражением [], который возвращает свойства?

В результате я хочу использовать имена свойств, чтобы динамически создавать запрос NHibernate QueryOver для каждой конкретной сущности и возвращать найденные элементы в соответствии слицо.

Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Вероятно, вы можете создать интерфейс, например, ILookup, чтобы определить, какие объекты будут доступны для поиска.Позже создайте атрибут, чтобы пометить, какие поля будут доступны, а затем выполните итерацию по сборке, в которой есть все сущности, и отфильтруйте их с помощью интерфейса.Как то так

var q = from t in Assembly.GetExecutingAssembly().GetTypes()
where t.IsClass && t.Namespace == nspace && t is ILookup
select t;
0 голосов
/ 10 июня 2018

Сначала вы должны создать ViewModel, поскольку вы не хотите выставлять свои доменные сущности ... Когда-либо.

Я думаю, что вы ищете запрос LINQ .Contains ()

objectList.Contains("query");
...