5

在实体框架中,您可以像这样即时运行和绑定自定义查询......

protected class NitrogenMoisutreContainer
{
    public double MinN { get; set; }
    public double MaxN { get; set; }
    public double MinM { get; set; }
    public double MaxM { get; set; }
}

// ...

var q = dbcontext.Database.SqlQuery<NitrogenMoisutreContainer>(@"SELECT MAX(NitrogenBalance) as MaxN, MIN(NitrogenBalance) as MinN, MAX(FCWaterPercent) as MaxM, MIN(FCWaterPercent) as MinM
                                                                    FROM agZoneProjectionGrowthStages
                                                                    WHERE NitrogenBalance > 0 AND FCWaterPercent > 0").First();

问题是,对我来说,这感觉很混乱。我必须为一个查询创建这个类,我永远不会再将它用于其他任何事情。结果在执行位置的下一行使用。

有没有办法可以返回匿名类型?即使我必须先声明它,像这样......

var anonItem = new {
    MinN = 0d,
    MaxN = 0d,
    MinM = 0d,
    MaxM = 0d
};

var q = dbcontext.Database.SqlQuery<anonItem.GetType()>("...");

我只是不知道如何将我的匿名类型Type作为T. 可能吗?

4

2 回答 2

5

如果您设置它以便可以推断类型,则可以做到这一点。例如

public static IEnumerable<T> GetObjects<T>(T exampleItem, string sqlQuery) { ... }
var q = GetObjects(anonItem, @"");

我认为这有点骇人听闻,我建议尝试另一种方法,例如实际创建命名类或使用元组。

于 2012-09-05T20:50:34.763 回答
2

问题是,对我来说,这感觉很混乱。我必须为一个查询创建这个类,我永远不会再将它用于其他任何事情。结果在执行位置的下一行使用。

我不认为这是一个问题。

有没有办法可以返回匿名类型?

您可以改为创建一个元组。

于 2012-09-05T20:51:01.300 回答