Вызовите метод c # в запросе linq (структура сущности) - PullRequest
2 голосов
/ 21 сентября 2011

Есть ли шанс запустить метод c # в запросе linq?Мне нужно сделать что-то подобное:

//...
class Match {
  public double PrecentageMatching(string s1, string s2) {
    //...
    return result; // value from 0.0 to 1.0
  }
}
//...

string pattern = "nameOfRecord";
var similarRecords = db.Table.Select( 
   r => Match.PrecentageMatching(r.name, pattern) > 0.5 
);

Я знаю, что там linq не будет знать метод PrecentageMatching.Но мне интересно, есть ли способ сделать это?

Я использую Entity Framework.Мне нужно сделать это без хранимых процедур и сборки на стороне базы данных.У меня нет доступа к базе данных.

Ответы [ 2 ]

5 голосов
/ 21 сентября 2011

Сначала необходимо получить данные из базы данных, а затем выполнить преобразование:

string pattern = "nameOfRecord";
var similarRecords = db.Table
                       .Select(r => r.name)
                       .ToList() // This call fetches the data from the DB
                       .Select(x => Match.PrecentageMatching(x, pattern) > 0.5);

Это не проблема, поскольку вы только преобразовываете возвращенные данные с помощью вашего метода.Если вы хотите использовать свой метод для фильтрации возвращенных данных с использованием Where, у вас возникла проблема, поскольку сначала вам нужно будет вернуть ВСЕ данные и отфильтровать данные на вашем клиенте.Это может быть проблемой, если стол большой.

2 голосов
/ 21 сентября 2011

Измените ваш метод PrecentageMatching на статический метод. Затем он сможет найти метод Match.PrecentageMatching.

Кроме того, то, что вы делаете там, вернет IEnumerable логических значений. Если вы хотите вернуть записи из Таблицы, вам нужно «Где» вместо «Выбрать».

Редактировать: в соответствии с комментариями необходимо вызвать метод ToList ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...