В SQL Server 2005+ вы можете использовать функции Window. Но он не поддерживается в MySQL.
В подзапросе, выбор операторов должен иметь оператор объединения. Например:
SELECT * FROM (
(SELECT COUNT(..) ...) AS C1
INNER JOIN (SELECT COUNT(...) ...) AS C2
ON <condition>
INNER JOIN ... )
Вы могли сделать:
public static bool IsNullOrBlank(this String text)
{
return text==null || text.Trim().Length==0;
}
И затем называют его как это:
if(myString.IsNullOrBlank())
{
throw new ArgumentException("Blank strings cannot be handled.");
}
Это работает, потому что C# позволяет Вам называть дополнительный метод на null
экземпляры.
Можно безопасно использовать дополнительный метод на экземпляре:
public static class StringExtensions
{
public static bool IsNullOrBlank(this string s)
{
return s == null || s.Trim().Length == 0;
}
}
Тесты:
string s = null;
Assert.IsTrue(s.IsNullOrBlank());
s = " ";
Assert.IsTrue(s.IsNullOrBlank());
Это выглядит немного странным, хотя, и я вместо этого выяснил бы, почему Ваши строки должны проверяться на этот случай так часто. При фиксации их в источнике Вы не должны будете быть таким образом параноик о них позже!
public static bool IsNullOrEmptyTrimmed(string value)
{
return (value == null || value.Length == 0) ?
true :
value.Trim().Length == 0;
}
или
public static bool IsNullOrEmpty(this String value, bool checkTrimmed)
{
var b = String.IsNullOrEmpty(value);
return checkTrimmed ? (b && value.Trim().Length > 0) : b;
}
public static bool IsNull(this object o)
{
return string.IsNullOrEmpty(o.ToStr());
}
public static bool IsNotNull(this object o)
{
return !string.IsNullOrEmpty(o.ToStr());
}
public static string ToStr(this object o)
{
return o + "";
}
С несколькими приемами Вы заставляете его быть похожим, Вы добавили к Строка класс в любом файл cs :
namespace JDanielSmith
{
public static class String
{
public static bool IsNullOrBlank(string text)
{
return text == null || text.Trim().Length == 0;
}
}
}
(примечание, это не дополнительный метод, см. мой комментарий).
Затем в некотором другом файле CS:
using String = JDanielSmith.String;
namespace Foo.Bar.Baz
{
class Program
{
static void test(string myString)
{
if (String.IsNullOrBlank(myString))
{
throw new ArgumentException("Blank strings cannot be handled.");
}
}
...
Уведомление "желаемый" синтаксис Строка. IsNullOrBlank () . Я не обязательно предлагаю, чтобы Вы на самом деле сделали вещи этот путь, просто указав, как Вы могли настроить вещи заставить Ваш код работать.
Можно ли добавить статические методы для существующих классов? Ответ не, и значение было бы довольно тонким, потому что необходимо будет все еще знать который имя класса ввести сначала; с дополнительными методами преимущество состоит в том, что Вы запускаете с имени переменной, и автозавершение показывает Вам вещи, которые применимы к нему.
Другое мнение, часто высказываемое, - то, что дополнительные методы должны всегда выдавать исключение как можно скорее, если их первый аргумент является нулевым. Однако я думаю, что правило является излишеством, если метод упоминает на его имя, что это разработано для проверки на null
.
настоящая проблема, которую Вы имеете, состоит в том, что Вы хотите аккуратно и четко выполнить некоторый код после проверки нулевую ссылку. Один способ получить тот шаблон находится в мой ответ на этот вопрос .
Перегрузка существующих ответов могла бы быть:
public static bool IsNullOrBlank(this String text, Action<String> doWhat)
{
if (text!=null && text.Trim().Length>0)
doWhat(text);
}
Было бы полезно, если вы хотите запускать код только с допустимым значением.
Не очень полезный пример, но просто показываю использование:
Name.IsNullOrBlank(name=>Console.WriteLine(name));