Entity Framework вызывает строковые функции SQL базы данных, используя Linq? - PullRequest
2 голосов
/ 30 августа 2011

Если я хочу вызвать функцию SQL Server Contains(field,value) с помощью Linq, как я могу это сделать?

Делать что-то вроде:

var result = context.Documents.Where(d => d.SomeField.Contains(param)).ToList();

Не использует функцию Contains в сгенерированном запросе SQL. Поле является текстовым полем с включенным полнотекстовым поиском.

Я знаю, что должны быть некоторые строковые функции SQL Server, уже сопоставленные где-то в структуре. Contains один из тех, и где я могу их найти?

1 Ответ

1 голос
/ 30 августа 2011

Вы можете попробовать использовать функции магазина.Ладислав Мрнка подробно объясняет их на этом вопросе .

По сути, вы определите Contains в EDMX и расскажете EF, как он сопоставляется с тем, что понимает SQL Server (примечание: в моемНапример, я называю это FullTextContains, чтобы его не перепутать с методом Contains в C # - я не уверен, нужно ли это или нет):

<Function Name="FullTextContains" ReturnType="Edm.String">
  <Parameter Name="field" Type="Edm.String" />
  <Parameter Name="value" Type="Edm.String" />
  <DefiningExpression>
    Contains(field, value)
  </DefiningExpression>
</Function>

Затем вы создаете метод-заглушку в C #, такВы можете вызвать его через Linq:

public static class EdmFunctions
{
    [EdmFunction("YourModel", "FullTextContains")]
    public static string FullTextContains(string field, string value)
    {
        throw new NotSupportedException("This function is only for L2E query.");
    }
}

Тогда вы сможете использовать этот метод в запросе Linq, и EF должен правильно его перевести.

...