Решение для строковых значений действительно странно:
.OrderBy(f => f.SomeString == null).ThenBy(f => f.SomeString)
Единственная причина, по которой это работает, состоит в том, что первое выражение OrderBy()
, sort bool
: true
/ false
, false
Результат сначала следует результатом true
(nullables) и ThenBy()
сортирует ненулевые значения в алфавитном порядке.
Итак, я предпочитаю делать что-то более читаемое, например следующее:
.OrderBy(f => f.SomeString ?? "z")
Если SomeString
равно null, он будет заменен на "z"
, а затем отсортировать все по алфавиту.
ПРИМЕЧАНИЕ. Это не окончательное решение, поскольку "z"
идет первым, чем z-значения, такие как zebra
.
UPDATE 9/6/2016 - О комментарии @jornhd, it на самом деле это хорошее решение, но оно все еще немного сложное, поэтому я рекомендую его обернуть в классе Extension, например:
public static class MyExtensions
{
public static IOrderedEnumerable<T> NullableOrderBy<T>(this IEnumerable<T> list, Func<T, string> keySelector)
{
return list.OrderBy(v => keySelector(v) != null ? 0 : 1).ThenBy(keySelector);
}
}
И просто используйте его как:
var sortedList = list.NullableOrderBy(f => f.SomeString);
Я не знаю, что вы пытаетесь запросить, но основываясь на вашем фрагменте кода, вы используете mysqli и делаете выбор, основываясь на имени пользователя. Приведенный ниже код автоматически соединит вас с базой данных, если введенные учетные данные базы данных в порядке, и вы можете получить результаты на основе запрашиваемого имени пользователя, если информация о имени пользователя существует в вашей базе данных
<html>
<head>
<title></title>
</head>
<body>
<?php
$dbhost = 'localhost:3306';
$dbuser = 'root';
$dbpass = '';
$dbname = 'your db';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
if(! $conn ) {
die('Could not connect: ' . mysqli_error());
}
echo 'Connected successfully<br>';
$sql = "select * from user WHERE username = '$username'";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
echo "UserName: " . $row["username"]. "<br>";
}
} else {
echo "0 results";
}
mysqli_close($conn);
?>
</body>
</html>