可以使用LINQ查询匿名类型吗?

时间:2016-07-14 04:38:33

标签: c# entity-framework linq anonymous-types

我想使用EF从数据库中读取一些查找数据,因此我执行以下操作:

    public object LocationLookUps()
    {
        var locationTypes = ClientContext.LocationTypes;
        var serviceCategories = ClientContext.ServiceCategories;
        var serviceTypes = ClientContext.ServiceTypes;
        var timeZones = ClientContext.TimeZones;

        return new {locationTypes, serviceCategories, serviceTypes, timeZones};
    }

稍后,在我的消费代码中,我想查询这些类型中的每一个以检查给定的locationType,timeZone等是否是有效值。如果我返回了List<LocationType>,那么我可以将其查询为:

var locationType = list.SingleOrDefault(t => t.LocationTypeCode = "B");

你能用匿名类型做同样的事吗?

2 个答案:

答案 0 :(得分:0)

无法从方法返回匿名类型,并且通过返回对象,您将丢弃类型信息的设计时知识。没有办法做你要问的事。

但这并不意味着没有办法做你想做的事。一些选择:

  • 以四种不同的方法单独返回每个查找
  • 创建一个 AllLookups类,包括四个查找的类型属性 并从方法中返回
  • 使用Repository Pattern并使用自己的方法公开与特定查询相关的查询的方法

答案 1 :(得分:0)

不,你不能。 C#是强类型的。编译时编译器会查找所有匿名类型并将它们转换为实际类型。所有工作都与匿名类型转换为使用此生成的实际类型。

在您的代码中,您不知道未来真实类型的名称。所以你只能使用

var temp = new {something};

然后在不同的地方使用temp localy或者反射(动态关键字)

您返回Object。所以其他代码会像Object一样解释它。你不能做演员,因为你不知道名字。我想你必须创建一个包含四个字段的ViewModel类