Необходимо получить объекты, к которым присоединяются, в набор и затем применить DefaultIfEmpty как сказанный JPunyon:
Person magnus = new Person { Name = "Hedlund, Magnus" };
Person terry = new Person { Name = "Adams, Terry" };
Person charlotte = new Person { Name = "Weiss, Charlotte" };
Pet barley = new Pet { Name = "Barley", Owner = terry };
List<Person> people = new List<Person> { magnus, terry, charlotte };
List<Pet> pets = new List<Pet>{barley};
var results =
from person in people
join pet in pets on person.Name equals pet.Owner.Name into ownedPets
from ownedPet in ownedPets.DefaultIfEmpty(new Pet())
orderby person.Name
select new { OwnerName = person.Name, ownedPet.Name };
foreach (var item in results)
{
Console.WriteLine(
String.Format("{0,-25} has {1}", item.OwnerName, item.Name ) );
}
Выводы:
Adams, Terry has Barley
Hedlund, Magnus has
Weiss, Charlotte has
Вот какой-то MVC "Hello, World":
function get_users() {
return array(
'Foo',
'Bar',
'Baz',
);
}
function users_template($users) {
$html = '<ul>';
foreach ($users as $user) {
$html .= "<li>$user</li>";
}
$html .= '</ul>';
return $html;
}
function list_users() {
$users = get_users();
echo users_template($users);
}
Основная идея состоит в том, чтобы отделить доступ к данным (модель) от представления данных (представление). Контроллер должен делать не больше, чем просто соединять их вместе.
Вот самый простой пример. Ваш файл index.php является контроллером, получает некоторые данные из модели, а затем включает HTML через файл представления.
/* index.php?section=articles&id=3 */
// includes functions for getting data from database
include 'model.php';
$section = $_GET['section'];
$id = $_GET['id'];
switch ( $section )
{
case 'articles':
$article = getArticle( $id );
include 'article.view.php';
}
.
/* article.view.php */
<html>
<head>
<title><?=$article['title']?></title>
</head>
<body>
<h1><?=$article['title']?></h1>
<p><?=$article['intro']?></p>
<?=$article['content']?>
</body>
</html>
QuickStart Zend Framework - неплохой пример «простого приложения» (не «Hello World», но не более того - и использование MVC для приложения «Hello World» немного похоже на использование ядерной бомбы для уничтожения ошибки) , на основе Zend Framework и с использованием MVC.
После, если вы хотите пойти немного дальше, вы можете взглянуть на электронную книгу Survive The Deep End! - работа все еще продолжается, но все равно интересно читать.
Это с ZF; Полагаю, вы можете найти то же самое с другими MVC Framework, такими как Symfony или CakePHP.