【问题标题】:Avoid extra loop and could not find implementation of query pattern for source type int Select not found避免额外的循环,并且找不到源类型 int 的查询模式的实现 未找到选择
【发布时间】:2013-02-06 08:11:46
【问题描述】:

如何避免额外循环并在 LINQ 任务本身中构造顺序。

GetOrderListDataContext orderListDaCtx = new GetOrderListDataContext(address);
// This line showing compiler error could not find implementation of query pattern for source type int Select not found
var orderList = from order in orderListDaCtx.Base_Purchase_GetOrderListByUser_WS(request.UserGuid, request.CountryCode, request.FromDate, request.ToDate)
                select order;
// Here how i can avoid this loop and construct order object in the LINQ itself above                   
List<Order> orders = new List<Order>();
foreach (var order in orderList)
{
    orders.Add(new Order
     {
         OrderKey = order.OrderKey,
         UserEmail = order.UserEmail,
         CreatedDate = order.CreatedDate
     });
}
return orders;

【问题讨论】:

  • 您使用了数据库结果中的 3 个字段,但实际模型中有多少个字段?如果大于3,你使用的Order类是和DB实体一样还是不一样?

标签: c# linq foreach


【解决方案1】:

你是这个意思吗?

GetOrderListDataContext orderListDaCtx = new GetOrderListDataContext(address);
var orderList = from order in orderListDaCtx.Base_Purchase_GetOrderListByUser_WS(request.UserGuid, request.CountryCode, request.FromDate, request.ToDate)
select new Order{
         OrderKey = order.OrderKey,
         UserEmail = order.UserEmail,
         CreatedDate = order.CreatedDate
}

return orderList.ToList();

【讨论】:

  • 找不到源类型 int Select not found 的查询模式实现
  • 需要使用System.Linq;
  • 在 OP 使用它之前再次 +1。他必须解决第一个问题
【解决方案2】:

你可以直接链接:

var orders = orderListDaCtx.Base_Purchase_GetOrderListByUser_WS(request.UserGuid, request.CountryCode, request.FromDate, request.ToDate)
                           .Select(order => new Order
                             {
                               OrderKey = order.OrderKey,
                               UserEmail = order.UserEmail,
                               CreatedDate = order.CreatedDate
                             })
                           .ToList();
return orders;

【讨论】:

  • 您的查询显示编译器错误“找不到源类型 int Select not found 的查询模式实现”
  • +1 这个是正确的.. 但在 OP 使用这个之前。他必须解决第一个问题
【解决方案3】:

显示编译器错误的这一行找不到实现 未找到源类型 int Select 的查询模式

您的主要问题来自您的存储过程。参考:Linq Stored Procedure Issue- Returning an int

【讨论】:

    【解决方案4】:

    LINQ Error:

    找不到源类型“Your.Type”的查询模式的实现。未找到“选择”。考虑明确指定范围变量的类型

    orderListDaCtx.Base_Purchase_GetOrderListByUser_WS(request.UserGuid, request.CountryCode, request.FromDate, request.ToDate) 可能返回类型“IEnumerable”,但LINQ 需要IEnumerable&lt;T&gt;。您必须执行显式转换:

    var orderList = from Order order in orderListDaCtx.Base_Purchase_GetOrderListByUser_WS(request.UserGuid, request.CountryCode, request.FromDate, request.ToDate)
                    select order;
    

    我假设 Base_Purchase_GetOrderListByUser_WS 返回 Order 的集合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 2015-09-23
      • 1970-01-01
      • 2010-11-10
      • 1970-01-01
      • 2018-02-24
      相关资源
      最近更新 更多