Как я могу найти объединенную строку в предложении where в linqdatasource? - PullRequest
0 голосов
/ 25 января 2012

Я ищу для поиска Полное имя в моем классе профиля.Может кто-нибудь сказать мне, что я делаю неправильно?

Я получаю: Profile.FullName не поддерживает перевод на SQL.

Частичный класс linq:

partial class Profile
    {
        public static readonly Expression<Func<Profile, string>> expFullName = p => p.FirstName + " " + p.LastName;
        public static readonly Func<Profile, string> funcFullName = expFullName.Compile();

        public string FullName
        {
            get { return funcFullName(this); }
        }
    }

Код источника данных:

    <asp:LinqDataSource runat="server" ID="someSource" ContextTypeName="MyContext" TableName="Images" 
Where='Approved == true && CategoryID = 2 && (@searchTerm = "" || Profile.FullName.Contains(@searchTerm))'>
        <WhereParameters>
             <asp:ControlParameter Name="searchTerm" ControlID="txtSearch" DefaultValue="" ConvertEmptyStringToNull="false" />
        </WhereParameters>
    </asp:LinqDataSource>    

Хочу отметить, что приведенное ниже решение работает.Но я хотел бы иметь производное свойство для FullName и использовать его безоговорочно.Это вообще возможно?

(Profile.FirstName + " " + Profile.LastName).Contains(@searchTerm)

1 Ответ

0 голосов
/ 25 января 2012

Это работает, потому что оно может быть переведено в SQL:

(Profile.FirstName + " " + Profile.LastName).Contains(@searchTerm)

Это не будет работать, потому что FullName не отображается в столбец в SQL:

(Profile.FullName).Contains(@searchTerm)
...