2015-06-26 2 views
0

Я использую приведенный ниже код для преобразования Dataset в IList. Есть ли лучший способ, чтобы написать код ниже:C# Datatable to IList conversion

IList lst = new List<object>(); 
var tbl = dsList.Tables[0]; 
foreach (DataRow dr in tbl.Rows) 
{ 
    lst.Add(dr.ItemArray); 
} 
+1

Всегда есть лучший способ сделать что-либо. Но вам нужно быть более конкретным. Должен ли желаемый код быть более элегантным? Или это о производительности? –

+0

Это больше о производительности, и я использую .NET 4.0 – Algi

+0

. Тогда нет «лучшего» способа. –

ответ

6
using System.Linq; 


    IList<object> lst = dsList.Tables[0].Rows.OfType<DataRow>().Select(x => x.ItemArray).ToList(); 

Просто используя Select() метод System.Link на Rows в коллекции table. Это метод расширения, который можно вызывать на любом IEnumerable<T> (также на любом объекте, который реализует этот интерфейс напрямую или через наследование).

Если вы не имеете IEnumerable<T> для запроса, а просто IEnumerable (не общего), вы можете использовать трюк вызова .OfType() на нем, который возвращает общий экземпляр.

Если вы хотите выровнять перечислимое число, вы можете использовать SelectMany().

Если вы застряли на pre-linq .NET, у вас должен быть цикл.

+1

Дайте некоторую информацию о том, что вы здесь делаете – Mivaweb

+0

Это .NET3.5 +, если вы похожи на меня, застряв в среде NET2.0, вам нужно использовать цикл for. Подробнее о LINQ здесь: https://msdn.microsoft.com/en-us/library/bb397933.aspx –

+0

Да, если вы застряли на .NET <3.5, вы должны сказать это в вопросе. –

0

Насколько я вижу, нет никакого способа улучшить код. Метод, который вы используете в настоящее время, является наилучшим решением.

+0

Список должен содержать '.ItemArray' of DataRows. –

+0

Затем вам нужно пройти через него с помощью цикла foreach или использовать LINQ, который не может действительно увидеть, что еще вы можете здесь сделать – Fabjan