Мне лично нравится решение Мира, но если Вы абсолютно требуете только одной возвращенной строки (как я недавно имел), В SQL Server MS 2005/2008 Вы может "сложить" два запроса с помощью CTE
with NullRows (countOf)
AS
(
SELECT count(*)
FORM table
WHERE [processed_timestamp] IS NOT NULL
)
SELECT count(*) AS nulls, countOf
FROM table, NullRows
WHERE [processed_timestamp] IS NULL
GROUP BY countOf
Hope, которому это помогает
Несмотря на то, что анонимный тип является обычным типом, вы можете использовать некоторые эвристики:
public static class TypeExtension {
public static Boolean IsAnonymousType(this Type type) {
Boolean hasCompilerGeneratedAttribute = type.GetCustomAttributes(typeof(CompilerGeneratedAttribute), false).Count() > 0;
Boolean nameContainsAnonymousType = type.FullName.Contains("AnonymousType");
Boolean isAnonymousType = hasCompilerGeneratedAttribute && nameContainsAnonymousType;
return isAnonymousType;
}
}
Еще одна хорошая эвристика, которую можно использовать, - если имя класса является допустимым именем C # (генерируются анонимные типы без допустимых имен классов C # - используйте для этого регулярное выражение).
В метаданных и CLR нет таких терминов, как анонимные типы. Анонимные типы - это исключительно функция компилятора.
Не существует языковой конструкции C #, которая позволяла бы вам сказать: «Это анонимный тип?». Вы можете использовать простую эвристику, чтобы приблизительно определить, является ли тип анонимным, но можно обмануть людей, кодирующих IL вручную или используя язык, где такие символы, как> и <, допустимы в идентификаторах.
public static class TypeExtensions {
public static bool IsAnonymousType(this Type t) {
var name = t.Name;
if ( name.Length < 3 ) {
return false;
}
return name[0] == '<'
&& name[1] == '>'
&& name.IndexOf("AnonymousType", StringComparison.Ordinal) > 0;
}
Может быть полезно узнать, почему вы хотите это знать. Если вы выполните следующее:
var myType = new { Name = "Bill" };
Console.Write( myType.GetType().Name );
... вы увидите что-то вроде "<> f__AnonymousType0`1" в качестве имени типа. В зависимости от ваших требований вы можете предположить, что тип, начинающийся с <>, содержащий "AnonymousType" и символ обратной кавычки, - это то, что вы ищете.
Кажется, анонимные типы получают DebuggerDisplayAttribute
, помещенный на них, где Type = "
.
Изменить: Но только когда вы компилируете в режиме отладки. Черт.