Лучший способ бросить от Животного [] Собаке []

Основываясь на коде JustinStolle (спасибо), я хотел найти решение, которое могло бы быть универсальным без указания имен столбцов.

В этом примере используются данные временной таблицы, но, конечно, их можно корректировать по мере необходимости.

Вот что я получил:

DECLARE @htmlTH VARCHAR(MAX) = '',
        @htmlTD VARCHAR(MAX)

--get header, columns name
SELECT @htmlTH = @htmlTH + '<TH>' +  name + '</TH>' FROM tempdb.sys.columns WHERE object_id = OBJECT_ID('tempdb.dbo.#results')

--convert table to XML PATH, ELEMENTS XSINIL is used to include NULL values
SET @htmlTD = (SELECT * FROM #results FOR XML PATH('TR'), ELEMENTS XSINIL)

--convert the way ELEMENTS XSINIL display NULL to display word NULL
SET @htmlTD = REPLACE(@htmlTD, ' xsi:nil="true"/>', '>NULL</TD>')
SET @htmlTD = REPLACE(@htmlTD, '<TR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">', '<TR>')

--FOR XML PATH will set tags for each column name, <columnName1>abc</columnName1><columnName2>def</columnName2>
--this will replace all the column names with TD (html table data tag)
SELECT @htmlTD = REPLACE(REPLACE(@htmlTD, '<' + name + '>', '<TD>'), '</' + name + '>', '</TD>')
FROM tempdb.sys.columns WHERE object_id = OBJECT_ID('tempdb.dbo.#results')


SELECT '<TABLE cellpadding="2" cellspacing="2" border="1">'
     + '<TR>' + @htmlTH + '</TR>'
     + @htmlTD
     + '</TABLE>'
5
задан Lucas 3 June 2009 в 11:40
поделиться

4 ответа

var dog_arr = Array.Convert(animal_arr, x => (Dog) x);
11
ответ дан 18 December 2019 в 10:48
поделиться

При использовании LINQ это будет

oldarray.Cast<Dog>().ToArray();
6
ответ дан 18 December 2019 в 10:48
поделиться

Может быть, вы вообще сможете создать его как массив Dog []?

Дано:

interface ICage {
    Animal[] GetAnimals();
}

Если вы создаете экземпляр массива Animal [] с Dogs в нем, вы не можете преобразовать массив:

class DogCage : ICage {
    Animal[] GetAnimals() { return new Animal[] { spot, fido }; }
}

Если вы создаете экземпляр массива Dog [] с Dogs в нем, он все равно может быть возвращен как Animal [] массив, но вы также можете преобразовать массив обратно в Dog [].

class DogCage : ICage {
    Animal[] GetAnimals() { return new Dog[] { spot, fido }; }
}

Теперь это будет работать:

Dog[] dogs = (Dog[])cage.GetAnimals();
2
ответ дан 18 December 2019 в 10:48
поделиться

Вы можете использовать общую коллекцию, например List from System.Collections.Generic вместо массива, тогда используйте следующее:

List<Animal> animals = new List<Animal>();
animals.Add(new Dog());
List<Dog> dogs = animals.ConvertAll(delegate(Animal animal) { return (Dog)animal; });

Если он вам действительно нужен в массиве, вы также можете сделать:

animals.ConvertAll(delegate(Animal animal) { return (Dog)animal; }).ToArray();    
-3
ответ дан 18 December 2019 в 10:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: