使用LINQ2SQL从存储过程返回匿名类型

时间:2009-03-02 20:57:22

标签: linq-to-sql stored-procedures

考虑以下存储过程:

SELECT * FROM Customers;

SELECT Customer.Id, Customer.Name, Order.Total, Order.DateOrdered
FROM Customers INNER JOIN Orders ON Customers.Id = Orders.CustomerId;

该过程显然返回了两个我试图用这个分类方法检索的结果集:

public partial class DBSproc : DataContext
{
    [Function(Name = "dbo.spGetCustomersAndOrders")]
    [ResultType(typeof(Customer))]
    // What type should I use here for the second resultset?
    [ResultType(typeof(... what here? ...))] 
    public IMultipleResults GetCustomersAndOrders()
    {
        IExecuteResult result =
            this.ExecuteMethodCall(this,
               ((MethodInfo)(MethodInfo.GetCurrentMethod())));

        return (IMultipleResults)(result.ReturnValue);
    }
}

我理解第一个结果集将映射到Customer实体,但第二个结果集又如何呢?第二个是自定义选择,它组合了多个表中的多个列。我没有具有这些属性的实体。

我应该为该结果集创建一个虚拟实体吗?我希望我能以某种方式使用匿名类型进行这种即席查询。

感谢。

1 个答案:

答案 0 :(得分:0)

一般来说,只有当返回类型为“object”时,才能从方法返回匿名类型。然后,调用代码不知道您的匿名类型可能具有哪些属性,除非它使用反射。

所以是的,你可以使用匿名类型,但你可能不想这样做,因为它不是很有用。