在lambda linq中将日期转换为波斯日期

时间:2014-04-22 15:20:16

标签: c# sql linq lambda

我想将SQL中的保存日期更改为波斯日期。我使用linq这是我的代码,但我有错误milladi2shamsi类

public string Miladi2Shamsi(DateTime _date)
{
        PersianCalendar p = new PersianCalendar();
        DateTime dmiladi = new DateTime();
        DateTime sp = new DateTime();
        dmiladi = _date;

        sp = Convert.ToDateTime
            (p.GetYear(dmiladi).ToString() + " " + p.GetMonth(dmiladi).ToString() 
            + " " + p.GetDayOfMonth(dmiladi).ToString() + " " 
            + p.GetDayOfWeek(dmiladi).ToString() + " ");

        return sp.ToString("yyyy/MM/dd");
    }

这是我的类更改日期到波斯日期日期保存在sql miladi日期

var q = db.Kharidars.Join(db.Factor_kharidars, c => c.Id, o =>
               o.Id_kharidar_bes, (c, o) => new
               {
                   o.Row,
                   c.Coname,
                   Miladi2Shamsi(o.Date),
                   o.Id_kharidar
               })Where(i => i.Id_kharidar
               == Guid.Parse(txtid.Text)).Where(i => i.Date >= Convert.ToDateTime(datenow.Value.ToString("yyyy-MM-dd")));

2 个答案:

答案 0 :(得分:0)

在实现之前,不能在SQL-2-Linq表达式中使用c#。

即。添加.ToList()然后.Where(xxxx)

无论如何,这会在过滤之前将所有行下载到服务器,对于大数据来说可能会很慢。

答案 1 :(得分:0)

将您的功能更改为:

public string Miladi2Shamsi(DateTime _date)
{
    PersianCalendar p = new PersianCalendar();

    string sp = string.Format("{0}/{1}/{2}",
                    p.GetYear(_date).ToString(), 
                    p.GetMonth(_date).ToString("00"),
                    p.GetDayOfMonth(_date).ToString("00"));

    return sp;
}

因为您已将日期时间保存为数据库中的DateTime,所以在where语句中只需检查日期时间值,我的意思是

.Where(i => i.Date >= datenow.Value);