нужен более эффективный способ работы с источником данных объекта в .net - PullRequest
1 голос
/ 20 августа 2010

Я пишу веб-сайт, используя .net, на некоторых своих страницах мне нужно использовать сетку данных для отображения некоторых данных и для привязки моих данных к сетке данных. Я использую объектный источник данных примерно так:

//this is 
public class userData
{
    private long userid = 0;
    private string username = null;
    private long amounts = 0;
    private DateTime registerdate;

    public long Userid
    {
        get { return userid; }
        set { userid = value; }
    }

    public string Username
    {
        get { return username; }
        set { username = value; }
    }

    public long Amounts
    {
        get { return amounts; }
        set { amounts = value; }

    }

    public DateTime Registerdate
    {
        get { return registerdate; }
        set
        { registerdate = value;}

    }

    }

//my businesshelper class

public class BusinessHelper
{
    public BusinessHelper()
    {
        //
        // TODO: Add constructor logic here
        //
    }


    public ICollection GetusersAmount()
    {
        ArrayList list = new ArrayList();
        DataSet1TableAdapters.userTableAdapter usert = new DataSet1TableAdapters.userTableAdapter();
        DataSet1.userDataTable ud = usert.GetData();


        foreach(DataSet1.userRow R in ud)
        {
            userData user = new userData();
            user.Amounts = R.Amount;
            user.Registerdate = R.registerdate;
            user.Userid = R.userID;
            user.Username = R.username ;
            list.Add(user);

        }
        return list;
    }
}

изатем в своем файле APSX я помещаю объектный источник данных и связываю оператор выбора с GetUsersAmount (), а затем связываю obejctdatasource с моей сеткой данных

, но я думаю, что выбранный мной способ неэффективен, я просто хочу услышать отвой способ делать такие вещи.

привет.

Ответы [ 3 ]

2 голосов
/ 20 августа 2010

Вы можете начать, используя автоматические свойства:

public class userData
{
  //  private long userid = 0;

    public long Userid    { get; set;   }

    ....
}

И, если вы хотите оставить TableAdapter:

// untested
DataSet1.userDataTable ud = usert.GetData();

var list = from r in ud.Rows.AsEnumerable()
           select new userData() { Userid = r.userID, Username = r.username }

return list; // maybe list.ToList()

В стороне, я бы посоветовал хорошенько взглянутьв ваших соглашениях об именах эти имена классов в нижнем регистре меня немного смутили.

1 голос
/ 20 августа 2010

Я не думаю, что вы делаете что-то не так (самое большее, как подсказывает другой автор, вы можете использовать DataReader вместо набора данных). Класс userData обычно называется DTO (объект передачи данных) или классом сущности. У вас есть другие варианты DTO, а также - например, вы можете использовать типизированные таблицы данных или общие наборы данных. Пользовательские классы являются наиболее гибким выбором, но, конечно же, требуют больше усилий - потому что вы должны вручную написать их и написать логику для их заполнения / сохранения. Существуют интегрированные среды (OR Mapper) для сокращения этих обыденных усилий и автоматической генерации кода доступа к данным. Примером таких инструментов могут быть Entity Framework (ADO.NET Entity Model), Linq To Sql, NHibernate и т. Д.

0 голосов
/ 20 августа 2010

Я бы не использовал набор данных для заполнения вашего списка бизнес-объектов, но использовал бы SqlDataReader или что-то в этом роде.Наборы данных имеют гораздо больше накладных расходов, чем DataReaders.

Я бы также использовал Collection (или что-то на основе IEnumerable) для возврата списка бизнес-объектов обратно.Вероятно, затраты на приведение к и от ArrayList сопряжены с затратами.

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

...