C#程序在将LINQ Date转换为字符串时停止执行

时间:2015-10-02 17:25:42

标签: datetime entity-framework-6

我正在使用实体框架6处理C#。 当我的程序控件到达下面的代码行时。

Date= j.Date.Value.ToShortDateString()

它会停止执行..

以下是实体框架工作加入查询代码

            SCIMSEntities db = new SCIMSEntities();
        var list = from i in db.tblVendors
                join j in db.tblVendorPaymentBillsHistories on i.Id equals j.Vendor_Id
                select new clsAddBillToVendor
                {
                    id= j.Id,
                    CompanyName= i.CompanyName,
                    BillNo= j.BillNo,
                    Details= j.Details,
                    BilllAmount= j.BillAmount.Value,
                    Date= j.Date.Value.ToShortDateString(),
                    TotalAmount= j.TotalAmount.Value
                };
             return list; 

2 个答案:

答案 0 :(得分:1)

我发现了错误。当控制来到这一行执行

    Date= j.Date.Value.ToShortDateString()

但SQL Server数据库中的值已经是ShortDate格式。我认为DateTime类没有定义或异常处理机制来转换已经很短的DateTime到短日期时间格式。所以它停止执行。 我刚刚从code.my新代码行中删除了“ToShortDateString()”

    Date= j.Date.Value;

每件事都运作良好

答案 1 :(得分:0)

您不能在LINQ to Entities中使用字符串函数,因此您需要创建一个IEnumerable,以便您可以使用LINQ to Entities:

        SCIMSEntities db = new SCIMSEntities();

        var (list = from i in db.tblVendors
            join j in db.tblVendorPaymentBillsHistories on i.Id equals j.Vendor_Id
            select new clsAddBillToVendor
            {
                j.Id,
                i.CompanyName,
                j.BillNo,
                j.Details,
                j.BillAmount,
                j.Date,
                j.TotalAmount
            })
         .AsEnumerable()
         .Select(x => new clsAddBillToVendor
                {
                    x.Id,
                    x.CompanyName,
                    x.BillNo,
                    x.Details,
                    x.BillAmount,
                    Date = x.Date.Value.ToShortDateString(),
                    x.TotalAmount
                })
         .ToList();

         return list;