首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >林克。连接多个表时出现匿名类型错误

林克。连接多个表时出现匿名类型错误
EN

Stack Overflow用户
提问于 2013-01-22 21:21:41
回答 2查看 823关注 0票数 1

我试图返回一个基于我的模型的IQueryable。

但是我需要两次加入同一个查找表。然后将查询变量返回到网格视图。

代码语言:javascript
复制
public IQueryable<Benchmark> GetBenchMarks([QueryString("hydrant")] string hydrant,
[QueryString("revdate")] string revdate, [QueryString("street")] string street,
[QueryString("quadrant")] string quadrant, [QueryString("desc")] string desc) {

    IQueryable<Benchmark> query = from p in _db.Benchmarks
    join s in _db.Streets on p.Street1Number equals s.Id
    join s2 in _db.Streets on p.Street2Number equals s2.Id
    select new {
        Street1Name = s.StreetName,
        p.OrderNumber,
        p.HydrantNumber,
        Street2Name = s2.StreetName,
        p.RevisionDate,
        p.Quadrant,
        p.Description,
        p.Street1Number
    };
}

因此,在s2的第二个连接处有一条红色的切换线。以及下面的错误。

Error 5 Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Linq.IQueryable<Benchmarks.Model.Benchmark>'. An explicit conversion exists (are you missing a cast?) C:\Projects\Benchmarks\Benchmarks\Benchmarks_Home.aspx.cs 63 25 Benchmarks

EN

回答 2

Stack Overflow用户

发布于 2013-01-22 21:32:56

由于您使用select new {...}结束查询,因此您将为每个结果创建一个匿名对象。相反,使用select p,每个结果都将是一个Benchmark

但是,似乎返回一个Benchmark并不是您想要的。在这种情况下,您可能希望将查询更改为IQueryableIQueryable<dynamic>类型(并且可能也更改GetBenchMarks函数的返回类型,除非它返回IQueryable<Benchmark>!)。

另一个(可能更好的)选择是创建一个类来表示这个匿名类型,并使用它。

票数 2
EN

Stack Overflow用户

发布于 2013-01-22 21:43:54

查询的结果是匿名对象的IEnumerable,因此不能转换为Benchmark

如果您想从连接关系中设置一些附加属性(Street1Name -显然不是映射到DB上),您可以这样做:

代码语言:javascript
复制
 IQueryable<Benchmark> query = from p in _db.Benchmarks
            join s in _db.Streets on p.Street1Number equals s.Id
            join s2 in _db.Streets on p.Street2Number equals s2.Id
        select new { 
                 ....
        };
 var ex = query.ToList();
 var result = new List<Benchmark>();
 foreach(bn in ex){
      result.Add(new Benchmark{ OrderNumber = bn.OrderNumber .... });
 }
// return result.AsQueryable();   
// but now it losts the point to return it as queryable, because the query was already executed so I would simply reurn that list
 return result;

另一个选项是创建表示查询中的对象的新类,并从方法中返回它,如下所示:

代码语言:javascript
复制
... select new LoadedBenchmark { Street1Name = s.StreetName ....}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14468240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档