如何按生日搜索人?

时间:2011-09-23 16:54:13

标签: c# search datatable

我发现了这种方式,还有其他简化吗?

       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 个答案:

答案 0 :(得分:2)

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进行迭代。

编辑:bemused对前几年的评论。

答案 1 :(得分:1)

你可以简化这个:

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?

这并没有改变这样的事实,即这不是存储搜索日期的好方法,但它是一个很好的起点。

除了Jim Dagg的LINQ示例之外,这就是我得到的全部内容。