林克.联接到多个表时出现匿名类型错误



我试图根据我的模型返回IQueryable。

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

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:ProjectsBenchmarksBenchmarksBenchmarks_Home.aspx.cs 63 25 Benchmarks

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

但是,看起来返回Benchmark不是您想要的。在这种情况下,您可能希望将查询更改为 IQueryableIQueryable<dynamic> 类型(并且可能还会更改 GetBenchMarks 函数的返回类型,除非它确实返回 IQueryable<Benchmark>

第二种(可能更好)的替代方法是创建一个类来表示此匿名类型,并使用它。

查询的结果IEnumerable匿名对象,因此无法转换为 Benchmark

如果要从联接关系中设置一些其他属性(Street1Name - 显然未在 DB 上映射),您可以执行以下操作:

 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;

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

... select new LoadedBenchmark { Street1Name = s.StreetName ....}

相关内容

  • 没有找到相关文章

最新更新