【问题标题】:DateTime Add calculation inside Linq to entities queryDateTime 将 Linq 内的计算添加到实体查询中
【发布时间】:2011-03-16 01:56:44
【问题描述】:

我正在尝试在 Linq 查询中添加日期时间。

错误是:LINQ to Entities 无法识别该方法 'System.DateTime AddMinutes(Double)' 方法,并且该方法不能 翻译成商店表达式。

它在 Link to SQL 中有效,但在 LINQ to Entity 中无效。

有没有其他方法可以做到这一点。

谢谢

DataClassesDataContext datacontext = new DataClassesDataContext();
        int concertid = Convert.ToInt32(ddlConcerts.SelectedValue.ToString());
        GridView1.DataSource = (from ticketallocation in datacontext.tblConcertTicketAllocation
                                where ticketallocation.ConcertID == concertid
                                && ticketallocation.Section == ddlSection.SelectedValue
                                && ticketallocation.Row == ddlRows.SelectedValue
                                select new
                                {
                                    AutoID = ticketallocation.AutoID,
                                    ConcertID = ticketallocation.ConcertID,
                                    Section = ticketallocation.Section,
                                    Row = ticketallocation.Row,
                                    Seats = ticketallocation.Seats,
                                    Status = ticketallocation.Status == 3 ? "<span style=\"color:#FF0000;\">Sold</span>" :
                                    ticketallocation.Status == 2 ? "<span style=\"color:#999999;\">Aisle Break</span>" :
                                    ticketallocation.Status == 0 ? "<span style=\"color:#009900;\">Available</span>" :
                                    ticketallocation.Status == 1 && ticketallocation.DateandTime.Value.AddMinutes(16) > DateTime.Now ? "<span style=\"color:#FF9900;\">Looking</span>" : "<span style=\"color:#009900;\">Available</span>",
                                    DateandTime = ticketallocation.DateandTime,
                                    OrderNumber = ticketallocation.OrderNumber
                                }).ToList();
        GridView1.DataBind();

【问题讨论】:

    标签: c# linq-to-entities


    【解决方案1】:

    EntityFramework 6中,EntityFunctions 消失了。

    使用

    System.Data.Entity.DbFunctions
    

    改为

    这不是对 OP 问题的回答,但可能对一些新来的观众有所帮助。

    【讨论】:

    • “+1 谢谢。” ...不过说真的,这只是简化了我们的业务逻辑的
    【解决方案2】:

    如果您使用的是 Entity Framework v4,请尝试此代码

    System.Data.Objects.EntityFunctions.AddMinutes(ticketallocation.DateandTime.Value, 16) 
    

    而不是

    ticketallocation.DateandTime.Value.AddMinutes(16)
    

    如果您使用的是 Entity Framework v1,则解决方案是 Entity SQL Canonical Functions,例如,就像在 this post 中描述的那样。

    【讨论】:

    • 不幸的是,您不能相信所有的提供者都实现了这个规范的功能。在我的情况下,它不适用于 Sybase。
    • 我看到了很多关于 SqlFunctions 的讨论,以至于我从未听说过 EntityFunctions(而且我最近一直在阅读) - 感谢 Devart。
    【解决方案3】:

    你可以使用:System.Data.Entity.DbFunctions

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-12
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多