Как LINQ работает внутренне?

Проблема в том, что ваша переменная data возвращается с новым символом строки. Для этого есть два решения: обрезайте возвращаемое значение. 2. выяснить, почему php обслуживает новую строку.

Решение 1:

if(data.trim()=="found")

Использует функцию обрезки JS, https: //developer.mozilla .org / ru-US / docs / Web / JavaScript / Reference / Global_Objects / String / Trim .

Решение 2:

Попробуйте удалить ?> из конец вашего PHP-файла (файл PHP все равно будет действителен). Таким образом, если после него появятся дополнительные строки, они не будут использоваться как выходные данные, а JS их не получит.

Из руководства:

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

55
задан rpf 23 March 2009 в 09:35
поделиться

4 ответа

Имеет больше смысла спрашивать о конкретном аспекте LINQ. Это немного похоже на выяснение, "Как Windows работает" иначе.

ключевые роли LINQ для меня с точки зрения C#:

  • Деревья выражений. Это представления кода как данные. Например, дерево выражений могло представить понятие, "берут строковый параметр, называют свойство Length на нем и возвращают результат". То, что они существуют как [1 113] данные , а не как скомпилированный код, означает, что поставщики LINQ, такие как LINQ к SQL могут проанализировать их и преобразовать их в SQL.
  • Лямбда-выражения. Это выражения как это:

    x => x * 2
    (int x, int y) => x * y
    () => { Console.WriteLine("Block"); Console.WriteLine("Lambda"); }
    

    Лямбда-выражения преобразовываются или в [1 114] делегаты или деревья выражений .

  • Анонимные типы. Это выражения как это:

    new { X=10, Y=20 }
    

    Они все еще со статическим контролем типов, это - просто компилятор, генерирует неизменный тип для Вас со свойствами X и Y. Они обычно используются с var, который позволяет типу локальной переменной быть выведенным из своего выражения инициализации.

  • выражения Запроса. Это выражения как это:

    from person in people
    where person.Age < 18
    select person.Name
    

    Они переводятся компилятором C# в "нормальный" C# 3.0 (т.е. форма, которая не использует выражения запроса). Разрешение перегрузки и т.д. применяется впоследствии, который является абсолютно ключевым для способности использовать тот же синтаксис запроса с несколькими типами данных без компилятора, имеющего любое знание типов, такими как Queryable. Вышеупомянутое выражение было бы переведено в:

    people.Where(person => person.Age < 18)
          .Select(person => person.Name)
    
  • Дополнительные методы. Это статические методы, которые могут использоваться, как будто они были методами экземпляра типа первого параметра. Например, дополнительный метод как это:

    public static int CountAsciiDigits(this string text)
    {
        return text.Count(letter => letter >= '0' && letter <= '9');
    }
    

    может тогда использоваться как это:

    string foo = "123abc456";
    int count = foo.CountAsciiDigits();
    

    Примечание, что реализация CountAsciiDigits использование другой дополнительный метод, Enumerable.Count().

Это - большинство соответствующих язык аспекты. Тогда существуют реализации стандартных операторов запроса в поставщиках LINQ, таких как LINQ к Объектам и LINQ к SQL и т.д. У меня есть представление о том, как довольно просто реализовать LINQ к Объектам - это находится на "Переговоры" страница C# подробно веб-сайт.

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

, который покрывает все, которое Вы интересовались? Если существует что-нибудь в особенности, что Вы все еще хотите знать о, просто отредактировать Ваш вопрос, и я буду делать попытку.

81
ответ дан Jon Skeet 7 November 2019 в 17:23
поделиться

LINQ является в основном комбинацией C# 3.0 дискретные функции их:

  • вывод типа локальных переменных
  • автоматические свойства (не реализованный в VB 9.0)
  • дополнительные методы
  • лямбда-выражения
  • анонимные инициализаторы типа
  • понимание запроса

Для получения дополнительной информации о поездке для получения там (LINQ) посмотрите это видео Anders в 2008 LANGNET:

http://download.microsoft.com/download/c/e/5/ce5434ca-4f54-42b1-81ea-7f5a72f3b1dd/1-01%20-%20CSharp3%20-%20Anders%20Hejlsberg.wmv

5
ответ дан Eriawan Kusumawardhono 7 November 2019 в 17:23
поделиться

В простом форма компилятор берет Ваш запрос кода и преобразовывает его в набор универсальных классов и вызовов. Внизу, в случае Linq2Sql, динамический SQL-запрос создается и выполнил использование DbCommand, DbDataReader и т.д.

Заявляют, что Вы имеете:

var q = from x in dc.mytable select x;

это преобразовывается в следующий код:

IQueryable<tbl_dir_office> q = 
    dc.mytable.Select<tbl_dir_office, tbl_dir_office>(
        Expression.Lambda<Func<mytable, mytable>>(
            exp = Expression.Parameter(typeof(mytable), "x"), 
            new ParameterExpression[] { exp }
        )
    );

Партии дженериков, огромных издержек.

3
ответ дан Ruslan 7 November 2019 в 17:23
поделиться

В основном linq является смесью некоторых средств языка (компилятор) и некоторых расширений платформы. Таким образом, когда Вы пишете запросы linq, они получают выполняемое использование соответствующие интерфейсы, такие как IQuerable. Также обратите внимание, что время выполнения не имеет никакой роли в linq.

, Но трудно отдать должное linq в коротком ответе. Я рекомендую прочитать некоторую книгу для получения в нем. Я не уверен в книге, которая говорит Вам внутренности Linq, но , Linq в Действии дает пользу, практическую об этом.

1
ответ дан Hemant 7 November 2019 в 17:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: