Подход, который я всегда использовал при программировании приложения winforms или wpf для выполнения запросов к базе данных, следующий:
Разработка интерфейса с несколькими элементами управления для передачи параметров в мои классы запросов
Создание класса «DataAccess» с полями, свойствами и методами для запросов на основе Linq или Entity Framework в качестве источника данных.
Управление событиями, генерируемыми элементами управления, для передачи параметров и выбора метода, который будет использоваться для извлечения данных.
Пример из класса DataAccess:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MyApplication
{
public class DataAccess
{
public LinqDataContext db = new LinqDataContext();
#region Private Fields
#region Properties(Constructors)
#region Methods
// Sample method
public List<DataAccess> Mymethod(string valoredata, int esenzione,
string valorebatch)
{
if (esenzione == 0)
{
return (from elementi in db.IndexTables
from elementi2 in db.DocumentTables
where elementi.ID == elementi2.ID
&& elementi.DataScansione == Convert.ToDateTime(valoredata)
&& elementi.Batch == valorebatch
&& elementi.NonEsente == true
select associazionePropieta(elementi, elementi2)).ToList();
}
else if (esenzione == 1)
{
return (from elementi in db.IndexTables
from elementi2 in db.DocumentTables
where elementi.ID == elementi2.ID
&& elementi.DataScansione == Convert.ToDateTime(valoredata)
&& elementi.Batch == valorebatch
&& elementi.BiffaturaReddito == false
&& elementi.FirmaAutocertificazione == false
&& elementi.NonEsente == false
select associazionePropieta(elementi, elementi2)).ToList();
}
else
{
return (from elementi in db.IndexTables
from elementi2 in db.DocumentTables
where elementi.ID == elementi2.ID
&& elementi.DataScansione == Convert.ToDateTime(valoredata)
&& elementi.Batch == valorebatch
&& (elementi.BiffaturaReddito == true
|| elementi.FirmaAutocertificazione == true)
select associazionePropieta(elementi, elementi2)).ToList();
}
}
#endregion
// From Refactoring...
private static DataAccess associazionePropieta(IndexTable elementi,
DocumentTable elementi2)
{
return new DataAccess
{
codiceImpegnativa = elementi.CodiceImpegnativa,
nominativo = elementi.Nominativo,
codiceFiscale = elementi.CodiceFiscale,
dataImpegnativa = elementi.DataImpegnativa,
nonEsente = Convert.ToBoolean(elementi.NonEsente),
biffaturaReddito = Convert.ToBoolean(elementi.BiffaturaReddito),
autocertificazione = Convert.ToBoolean(elementi.FirmaAutocertificazione),
codiceEsenzione = elementi.CodiceEsenzione,
raoU = Convert.ToBoolean(elementi.RaoU),
raoB = Convert.ToBoolean(elementi.RaoB),
raoD = Convert.ToBoolean(elementi.RaoD),
raoP = Convert.ToBoolean(elementi.RaoP),
dataScansione = Convert.ToDateTime(elementi.DataScansione),
batch = elementi.Batch,
documentID = elementi.DcumentID,
path = elementi2.Path,
ID = elementi2.ID.ToString()
};
}
ЗдесьНебольшая часть кода «MainWindow», у меня есть 7 элементов управления (1 средство выбора даты, 3 поля со списками и 3 текстовых поля), которые можно использовать в качестве параметров для запроса:
if (datePickerData.SelectedDate != null
&& comboBatch.SelectedValue == null
&& comboEsenzione.SelectedValue != null
&& nome == true
&& impegnativa == true
&& fiscale == true)
{
this.dataGridRisultati.ItemsSource =
dati.Mymethod(datePickerData.SelectedDate.ToString(),
comboEsenzione.SelectedIndex);
}
}
Можно представить, обрабатывая все комбинациипараметров, которые могут быть переданы, и структуры принятия решений (если или переключение дел) становятся огромной работой ... я разделил методы принятия решений в регионах (1 параметр, 2 параметра3, 7 параметров), и это дает мне отдых, но сегодня мне просто нужно было остановиться в области 4 параметров, я не знаю, устал ли я или что, но я не мог понять,шаблон, соответствующий всем комбинациям.
Итак, наконец, мой вопрос:
Я уверен, что есть гораздо более простой способ справиться с вероятностью того, что пользователь будет использовать поле со списком вместоtextbox, или все 7 элементов управления одновременно, чтобы запросить мою базу данных, но я просто не могу понять это.
Есть ли лучшая практика или шаблон, который может помочь?
Заранее спасибо