подходом я всегда имел в программировании WinForms или WPF приложения для выполнения запросов в базе данных является следующее:шаблона или наилучшая практика для обработки мульти запросов параметров в C#
Дизайна интерфейса с несколькими органами управления в передать параметры моим классам запросов
Создайте класс 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 DatePicker, 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);
}
}
ли вы можете себе представить, обработку всех комбинаций параметров, которые могут быть переданы и структуру принятия решения (если переключатель или случай) становится огромной работой ... я diveded РИКА (1 параметр, 2 параметра, 3 .... 7 параметров), и это дает мне немного покоя, но сегодня мне просто пришлось остановиться в области 4 параметров, я не знаю, был ли я просто устал или что, но я не мог понять шаблон, соответствующий всем комбинациям.
Итак, наконец, мой вопрос:
Я уверен, что есть гораздо более простой способ справиться с вероятностью того, что пользователь будет использовать выпадающий вместо текстового поля, или все 7 элементов управления в то же время запросите мою базу данных, но я просто не могу понять это.
Есть ли лучшая практика или образец, который мог бы помочь?
Заранее спасибо
Очень интересно, я очень хорошо посмотрю на это, таньк ты. –
Я только что понял, что написал более 1000 строк сложного и (на данный момент) бесполезного кода, спасибо вам;) –
Очень полезно, спасибо! – robbpriestley