【问题标题】:Entity Framework query syntax实体框架查询语法
【发布时间】:2011-11-20 04:50:25
【问题描述】:

我的查询有问题

我需要从GetAllOrderData 中取出SHIPMENT - 您可以在同一个地方找到POD_DATERECEIVE_NAME...但我收到一个错误

错误 1 ​​当前上下文中不存在名称“x”

我的代码是:

public IEnumerable<ReportItemDTO> GetTaskProgress(DateTime targetDate)
{
   try
   {
      var startDate = targetDate.Date;
      var endDate = startDate.AddDays(1);
      OrderDataRepository rep = new OrderDataRepository();

      var query = rep.GetAllOrderData()
                  .Where(x => x.POD_DATE >= startDate && x.POD_DATE <= endDate)
                  .GroupBy(o => o.User)
                  .Select(g => new ReportItemDTO
                    {
                      DriverId = g.Key.Id,
                      PdriverName = g.Key.Name,
                      OrderCount = g.Count(),
                      ReportedOrdersCount = g.Count(o => o.RECEIVE_NAME != null),
                      SHIPMENT = (x.SHIPMENT)
                    } );

      return query;

【问题讨论】:

    标签: asp.net linq entity-framework linq-to-entities


    【解决方案1】:
      SHIPMENT = (x.SHIPMENT)
    

    当您尝试进行该分配时,您是在一个分组中 - 每个分组中有 许多 个发货,而不仅仅是一个 - 实际上是该特定用户的所有发货。假设你想要一个 collection 你可以这样做:

    Shipments = g.Select( x=> x.SHIPMENT)
    

    编辑:

    如果您只想为每个用户提供第一次发货(有点不合逻辑但适合您的数据模型):

    SHIPMENT = g.Select( x=> x.SHIPMENT).First()
    

    【讨论】:

    • 错误 1 ​​无法将类型 'System.Collections.Generic.IEnumerable' 隐式转换为 'string'
    • @user1021182:ReportItemDTO 中的 Shipments 属性必须为 IEnumerable&lt;string&gt; 类型
    • 它是一个字符串 public string SHIPMENT { get;放; }
    • 你看答案了吗?该组中有许多货件 - 您想如何从中取出一个货件?
    • 是的,但是这些是相同的货件...我的意思是每个用户都有相同的货件代码...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2013-03-17
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多