ASP.NET LINQ SQL получить конкретные поля - PullRequest
0 голосов
/ 23 сентября 2011

Я пытаюсь установить текстовые поля на веб-странице ASP.NET, используя LINQ-SQL.Вот код, который я должен выполнить для оператора select:

    EQCN = Request.QueryString["EQCN"];
    var equipment = from n in db.equipments
                    where n.EQCN.ToString() == EQCN
                    select n;

Как установить TextBox1.text в качестве конкретного поля в таблице?1007 * РЕДАКТИРОВАТЬ

Мне нужно вывести каждое поле в таблице в разные текстовые поля.Так что выполнение запроса для любого отдельного кажется немного большим.Должен быть способ сделать это?

Спасибо

Ответы [ 2 ]

3 голосов
/ 23 сентября 2011

Ну, вы можете выбрать соответствующее поле для начала:

EQCN = Request.QueryString["EQCN"];
var values = from n in db.equipments
             where n.EQCN.ToString() == EQCN
             select n.FieldYouWant;

// Or possibly Single, or First...
var singleValue = values.FirstOrDefault();

Я думаю это то, что вы хотели, но если это не так, пожалуйста, уточните свой вопрос.

РЕДАКТИРОВАТЬ: Чтобы ответить на ваши последующие действия, вы можете использовать:

EQCN = Request.QueryString["EQCN"];
var query = from n in db.equipments
             where n.EQCN.ToString() == EQCN
             select n;

// Or possibly Single, or First...
var entity = query.Single();

textBox1.Text = entity.Name;
textBox2.Text = entity.Description;
textBox3.Text = entity.Title;
// etc

Это предполагает, что вы хотите иметь доступ ко всему в сущности. Если объект очень большой и вам нужно всего несколько полей, вы могли бы захотеть сделать что-то вроде этого:

EQCN = Request.QueryString["EQCN"];
var query = from n in db.equipments
             where n.EQCN.ToString() == EQCN
             select new { n.Name, n.Description, n.Title };

// Or possibly Single, or First...
var projection = query.Single();

textBox1.Text = projection.Name;
textBox2.Text = projection.Description;
textBox3.Text = projection.Title;

Я не уверен, что на самом деле я бы так тесно связал слои доступа к данным и пользовательского интерфейса, но это другой вопрос ...

2 голосов
/ 23 сентября 2011

Вам нужно выполнить запрос только один раз, но как только это будет сделано, вам придется назначить каждое поле для TextBox.Начните с извлечения только одного нужного вам элемента:

EQCN = Request.QueryString["EQCN"];
var equipment = (from n in db.equipments
                 where n.EQCN.ToString() == EQCN
                 select n).FirstOrDefault();

Затем пройдитесь и присвойте каждый TextBox соответствующему полю:

txtName.Text = equipment.Name;
txtDescription.Text = equipment.Description;
txtValue1.Text = equipment.Value1;
txtValue2.Text = equipment.Value2;
//...

Если вам нужно назначить несколько десятков TextBox, выможет настроить пользовательский элемент управления, который может быть привязан к объекту equipment, но даже тогда вам все равно придется написать код привязки для вашего элемента управления.

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

    var textboxes = Panel1.Controls.OfType<TextBox>();

    foreach (TextBox txt in textboxes)
    {
        string fieldname = txt.ID.Remove(0, 3); //"txtDescription" becomes "Description"

        string value = equipment.GetType().GetProperty(fieldname).GetValue(equipment, null) as string;
        txt.Text = value;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...