如何将linq中的特定列表结果返回给实体

时间:2011-02-23 10:38:50

标签: linq linq-to-sql entity-framework lambda linq-to-entities

嗨专家 我当前写这段代码:

public IList<TResult> GetCustomQuery<TResult>(int orderID, Func<Order, TResult> selector) 
    {
        using(RepositoryDataContext = new NorthwindEntities())
        {
            IList<TResult> res = (from od in RepositoryDataContext.Order_Details
                                  join o in RepositoryDataContext.Orders
                                      on od.OrderID equals o.OrderID
                                  join p in RepositoryDataContext.Products
                                      on od.ProductID equals p.ProductID
                                  join c in RepositoryDataContext.Customers
                                      on o.CustomerID equals c.CustomerID
                                  where o.OrderID > orderID
                                  select new
                                  {
                                      o.OrderID,
                                      od.UnitPrice,
                                      od.Quantity,
                                      p.ProductName,
                                      c.CompanyName
                                  }).Select<Order, TResult>(selector).ToList();
        }
    }

我想将linq的结果返回给特定格式的实体(TResult)。 使用Lambda Expression编写此代码很难,因为连接。 此行有例外:选择&lt;订单,TResult&gt; (选择器) 我怎么能解决这个问题? 感谢

3 个答案:

答案 0 :(得分:1)

不是创建匿名类型,而是创建POCO或在您的情况下创建订单

select new Order()
{
 OrderProperty1 = o.OrderID,
 OrderProperty2 = od.UnitPrice,
 OrderProperty3 = od.Quantity,
 OrderProperty4 = p.ProductName,
 OrderProperty5 = c.CompanyName
}).Select<Order, TResult>(selector).ToList();

答案 1 :(得分:0)

在你的第二行:尝试在Select()之前调用ToList()。像这样:

}).ToList().Select<Order, TResult>(selector);

答案 2 :(得分:0)

是否可以迭代“res”并返回TResult列表?