Случается, когда ваш скрипт пытается отправить HTTP-клиенту клиенту, но он уже был выведен ранее, что привело к тому, что заголовки уже отправлены на клиент.
Это E_WARNING
, и он не остановит сценарий.
Типичным примером может быть файл шаблона, подобный этому:
My Page
...
Функция session_start()
попытается отправить клиенту файлы cookie сеанса. Но PHP уже отправил заголовки, когда он написал элемент в выходной поток. Вам нужно будет переместить
session_start()
в верхнюю часть.
Вы можете решить эту проблему, пройдя через строки до код, запускающий предупреждение, и проверьте, где он выдается. Переместите любой заголовок, отправляющий код перед этим кодом.
Часто пропускаемый вывод - это новые строки после закрытия PHP ?>
. Считается стандартной практикой опускать ?>
, когда это последняя вещь в файле. Аналогичным образом, еще одной распространенной причиной этого предупреждения является то, что перед открытием перед ним появляется пустое пространство, строка или невидимый символ, в результате чего веб-сервер отправляет заголовки и пробел / новую строку, таким образом, когда PHP начинает синтаксический анализ, он не сможет для отправки любого заголовка.
Если в вашем файле содержится более одного кодового блока , у вас не должно быть пробелов между ними. (Примечание: у вас может быть несколько блоков, если у вас есть код, который был автоматически сконструирован)
Также убедитесь, что в вашем коде не указаны знаки байтового заказа, например, когда кодировка скрипта является UTF -8 с BOM.
Вопросы, относящиеся
Решение с анонимным типом должно хорошо работать. LINQ может только представлять объединения по эквивалентности (с пунктами соединения, так или иначе), и действительно это - то, что Вы сказали, что хотите выразить так или иначе на основе Вашего исходного запроса.
, Если Вам не нравится версия с анонимным типом по некоторой определенной причине, необходимо объяснить ту причину.
, Если Вы хотите сделать что-то другое, чем, что Вы первоначально попросили, дайте пример того, что Вы действительно хотите сделать.
РЕДАКТИРОВАНИЕ: Ответ на редактирование в вопросе: да, чтобы сделать соединение "диапазона дат", необходимо использовать где пункт вместо этого. Они семантически эквивалентны действительно, таким образом, это - просто вопрос доступных оптимизаций. Объединения по эквивалентности обеспечивают простую оптимизацию (в LINQ к Объектам, который включает LINQ в DataSets) путем создания поиска на основе внутренней последовательности - думают о нем как о хеш-таблице от ключа до последовательности записей, соответствующих тому ключу.
Выполнение этого с диапазонами даты несколько более трудно. Однако в зависимости от точно, что Вы подразумеваете под "соединением диапазона дат", можно быть в состоянии сделать что-то подобный - если Вы - планирование создания "полос" дат (например, один в год) таким образом, что две записи, которые происходят в том же году (но не в ту же дату) должны соответствовать, тогда можно сделать это только при помощи той полосы как ключ. Если это более сложно, например, одна сторона соединения обеспечивает диапазон, и другая сторона соединения обеспечивает единственную дату, соответствуя, если бы это находится в пределах того диапазона, который был бы лучше обработан с where
пункт (после секунды from
пункт) IMO. Вы могли сделать некоторое особенно броское волшебство, приказав, чтобы одна сторона или другой нашли соответствия более эффективно, но это будет большой работой - я только сделал бы такую вещь после проверки, является ли производительность проблемой.
var result = from x in entity
join y in entity2 on new { x.field1, x.field2 } equals new { y.field1, y.field2 }
Вы могли сделать что-то как (ниже)
var query = from p in context.T1
join q in context.T2
on
new { p.Col1, p.Col2 }
equals
new { q.Col1, q.Col2 }
select new {p...., q......};
Используя оператор объединения можно только выполнить объединения по эквивалентности. Другие типы соединений могут быть созданы с помощью других операторов. Я не уверен, было ли точное соединение, которое Вы пытаетесь сделать, более легким использованием этих методов или путем изменения где пункт. Документация относительно пункта соединения может быть найдена здесь . MSDN имеет статья об операциях соединения с несколькими ссылками на примеры других соединений, также.