Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在lambda linq中将日期转换为波斯日期_C#_Sql_Linq_Lambda - Fatal编程技术网

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

C# 在lambda linq中将日期转换为波斯日期,c#,sql,linq,lambda,C#,Sql,Linq,Lambda,我想将SQL中的保存日期更改为波斯日期。我使用linq作为我的代码,但是对于milladi2shamsi类我有错误 public string Miladi2Shamsi(DateTime _date) { PersianCalendar p = new PersianCalendar(); DateTime dmiladi = new DateTime(); DateTime sp = new DateTime(); dmilad

我想将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")));
在具体化之前,不能在SQL-2-Linq表达式中使用c

例如,添加一个.ToList(),然后添加.Where(xxxx)


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

将您的功能更改为:

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保存为数据库中的datetime,所以在where语句中只需使用datetime值进行检查,我的意思是

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

错误是什么?在您的代码中,它具体发生在哪里?您是否研究过错误,并努力了解它是什么以及为什么会发生?您已经尝试过修复它了吗?如果是,您尝试过什么?您遇到了什么错误?哪个错误?顺便说一句,将Guid.Parse()移动到LINQ查询之外。只需删除Convert.ToDateTime(),因为您不需要它。修复了您必须删除
Miladi2Shamsi
调用的问题。它无法在SQL中翻译。在查询DB之后再执行此操作。我认为这只是一个演示问题,对吗?因为我不是这段代码所用语言的母语(例如,
Kharidar
),所以我不完全确定它在做什么。但是,您应该使用
DateTime.ToString(string,IFormatProvider)
方法,使用相关的波斯语
CultureInfo
和格式字符串将日期正确格式化为适当的格式。SQL Server内部的所有存储实际上都应该采用固定格式,并在客户端执行特定于区域性的格式设置。我还强烈建议不要使用这些毫无意义的字符串转换。在我看来,根本不需要调用
Convert.ToDateTime
。错误1无效的匿名类型成员声明符。必须使用成员分配、简单名称或成员访问权限声明匿名类型成员。请将这行代码
Miladi2Shamsi(o.Date),
更改为
SDate=Miladi2Shamsi(o.Date),
我现在有2个错误1个错误2个参数1:无法从'System.DateTime'转换为'System.DateTime'错误2个错误1与'accpo.Forms.chek.chek_daryafti_kh.Miladi2Shamsi(System.DateTime)'匹配的最佳重载方法有一些无效参数,比如说,o.Date不是DateTime类型,您的DateTime在sql中的数据类型是什么?