DataTable для списка <возражают>

Я действительно нашел это полезным

$products = Product::with('features')->whereHas('features', function ($query) {
    return $query->where('id', 3);
})->where('category_id',17)->get();
7
задан LukeH 2 April 2009 в 10:07
поделиться

6 ответов

Нет, создание списка не является дорогостоящим. По сравнению с созданием таблицы данных и выборкой данных из базы данных, это очень дешево.

Можно сделать это еще более дешевым путем создания списка после заполнения таблицы, так, чтобы можно было установить начальную способность на количество строк, что Вы вставите его:

IList<INote> notes = new List<INote>(table.Rows.Count);
2
ответ дан 7 December 2019 в 03:21
поделиться

Почему бы не передать DataTable в функции вместо того, чтобы инстанцировать его? Это просто содержало бы ссылку.

Это - слишком простой ответ также стоить Вам, я уверен, но я не вижу, как он не решает Вашу проблему.

1
ответ дан 7 December 2019 в 03:21
поделиться

Нет уверенный, если это - то, что Ваш поиск, но Вы могли попробовать что-то вроде этого.

    public class Category
{
    private int _Id;
    public int Id
    {
        get { return _Id; }
        set { _Id = value; }
    }

    private string _Name = null;
    public string Name
    {
        get { return _Name; }
        set { _Name = value; }
    }

    public Category()
    {}

    public static List<Category> GetCategories()
    {
        List<Category> currentCategories = new List<Category>();

        DbCommand comm = GenericDataAccess.CreateTextCommand();
        comm.CommandText = "SELECT Id, Name FROM Categories Order By Name";
        DataTable table = GenericDataAccess.ExecuteSelectCommand(comm);

        foreach (DataRow row in table.Rows)
        {
            Category cat = new Category();
            cat.Id = int.Parse(row["Id"].ToString());
            cat.Name = row["Name"].ToString();
            currentCategories.Add(cat);
        }
        return currentCategories;
    }
}

Это - то, что я сделал так надежду, которой это помогает. Не уверенный, если это - правильный способ сделать это, но это работает на то, для чего мы нуждались в нем.

1
ответ дан 7 December 2019 в 03:21
поделиться

Вы хотите сослаться на строки таблицы? В этом случае необходимо использовать DataTable. Свойство Rows.

Попробуйте это:

notes.AddRange(table.Rows);

Если строки таблицы реализуют INote затем, это должно работать.

Кроме того, Вы могли сделать, как Вы сделали выше:

foreach (INote note in table.Rows)
{
  notes.Add(note)
}
0
ответ дан 7 December 2019 в 03:21
поделиться

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

-1
ответ дан 7 December 2019 в 03:21
поделиться

У меня есть другой подход, на который, возможно, стоит взглянуть. Это вспомогательный метод. Создайте файл пользовательского класса с именем CollectionHelper:

    public static IList<T> ConvertTo<T>(DataTable table)
    {
        if (table == null)
            return null;

        List<DataRow> rows = new List<DataRow>();

        foreach (DataRow row in table.Rows)
            rows.Add(row);

        return ConvertTo<T>(rows);
    }

Представьте, что вы хотите получить список клиентов. Теперь у вас будет следующий вызывающий объект:

List<Customer> myList = (List<Customer>)CollectionHelper.ConvertTo<Customer>(table);

Атрибуты, которые у вас есть в вашем DataTable, должны соответствовать вашему классу Customer (такие поля, как имя, адрес, телефон).

Надеюсь, это поможет!

Для тех, кто хочет знать, зачем использовать списки вместо таблиц данных: текст ссылки

Полный пример:

http://lozanotek.com/blog/ archive / 2007/05/09 / Converting_Custom_Collections_To_and_From_DataTable.aspx

6
ответ дан 7 December 2019 в 03:21
поделиться
Другие вопросы по тегам:

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