Как искать людей по дню рождения? - PullRequest
0 голосов
/ 23 сентября 2011

Я нашел такой способ, есть ли еще что-нибудь попроще?

       ClienteAdapter cliente = Cache.CacheManager.Get<ClienteAdapter>();
       DataTable dt = cliente.GetDataTable();
       DateTime dta = DateTime.Today;
        String dia = dta.Day.ToString();
        if (dta.Day < 10)
            dia = '0'+dia;
        String mes = dta.Month.ToString();
        if (dta.Month < 10)
            mes = '0'+mes;
        String aniversario = String.Format("{0}-{1}", dia, mes);
        dt = cliente.Get(dt, String.Format("WHERE dtNascCli LIKE '%{0}%'", aniversario));
        if (dt.Rows.Count>0) {
            String aniversariantes = "Aniversariantes do dia:\n";
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                aniversariantes += ((dt.Rows[i]["nmComprador"] != null) : dt.Rows[i]["nmComprador"] ? dt.Rows[i]["nmRazao"]) + "\n";
            }

Ответы [ 2 ]

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

LINQ может помочь вам начать.

from DataRow dr in dt.Rows
where ((Date)dr["birthday"]).Month = Date.Today.Month && ((Date)dr["birthday"]).Day = Date.Today.Day
select dr;

Это дает IEnumerable<DataRow>, который вы можете перебрать с foreach.

РЕДАКТИРОВАТЬ: Включенный комментарий ошеломленного за предыдущие годы.

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

Вы можете упростить это:

DateTime dta = DateTime.Today;
String dia = dta.Day.ToString();
if (dta.Day < 10)
    dia = '0'+dia;
String mes = dta.Month.ToString();
if (dta.Month < 10)
    mes = '0'+mes;
String aniversario = String.Format("{0}-{1}", dia, mes);

В это:

String aniversario = DateTime.UtcNow.ToString("dd'-'MM");
// You *are* storing dates in UTC aren't you?

Это не меняет того факта, что это не очень хороший способ хранения или поиск дат, но это хорошее место для начала.

Это все, что я получил, кроме примера Джима Дагга LINQ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...