如何解决 IQueryable Select 语句中 Union 的错误
How do I resolve an error on Union within IQueryable Select statement
我写了一个 IQueryable select 语句并尝试声明一个联合,这个联合的原因是因为我们稍后将包含一些神奇的代码,我们发现联合是最合适的方法但是我不会深入讨论,因为它与此错误无关。
Visual Studio返回的错误是
Error 6
Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to
'System.Linq.IQueryable<MyProject.Models.tbl_customers>'. An explicit conversion exists (are you missing a cast?)
select语句是:
var datacontext = db.tbl_customers.AsQueryable();
IQueryable<CustomerViewModel> thecustomer = (
from p in datacontext
select new {
customer_id = p.vessel_idx,
customer_name = p.customer_name
})
.Union ((
from p in datacontext
select new {
customer_id = p.vessel_idx,
customer_name = p.customer_name
}));
我尝试添加 .ToList 但这没有帮助。谁能建议解决此问题的方法?
嗯..我怀疑这与您的 LINQ 使用 Union()
这一事实无关。这是因为 LINQ returns 匿名类型,而专门用于保存结果的变量被声明为 IQueryable<CustomerViewModel>
类型。
您可以通过将 thecustomer
变量声明更改为合适的类型来轻松修复它,例如 var
或 IQueryable<dynamic>
或其他能够容纳 IQueryable
的类型匿名类型值:
var thecustomer = (
from p in datacontext
select new {
customer_id = p.vessel_idx,
customer_name = p.customer_name
})
.Union ((
from p in datacontext
select new {
customer_id = p.vessel_idx,
customer_name = p.customer_name
}));
同意@har07,两个查询都使用相同的匿名类型投影结果(它们共享相同的 属性 名称和类型)。问题是 thecustomer
变量是 IQueryable<CustomerViewModel>
。解决此问题的另一种方法是将您的查询投影到您的 ViewModel class:
IQueryable<CustomerViewModel> thecustomer = (
from p in datacontext
select new CustomerViewModel{
customer_id = p.vessel_idx,
customer_name = p.customer_name
})
.Union ((
from p in datacontext
select new CustomerViewModel{
customer_id = p.vessel_idx,
customer_name = p.customer_name
}));
在这种情况下,我假设您的视图模型 class 具有与您的匿名类型同名的属性,但您可以在方便时更改这些属性。
我写了一个 IQueryable select 语句并尝试声明一个联合,这个联合的原因是因为我们稍后将包含一些神奇的代码,我们发现联合是最合适的方法但是我不会深入讨论,因为它与此错误无关。
Visual Studio返回的错误是
Error 6
Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to
'System.Linq.IQueryable<MyProject.Models.tbl_customers>'. An explicit conversion exists (are you missing a cast?)
select语句是:
var datacontext = db.tbl_customers.AsQueryable();
IQueryable<CustomerViewModel> thecustomer = (
from p in datacontext
select new {
customer_id = p.vessel_idx,
customer_name = p.customer_name
})
.Union ((
from p in datacontext
select new {
customer_id = p.vessel_idx,
customer_name = p.customer_name
}));
我尝试添加 .ToList 但这没有帮助。谁能建议解决此问题的方法?
嗯..我怀疑这与您的 LINQ 使用 Union()
这一事实无关。这是因为 LINQ returns 匿名类型,而专门用于保存结果的变量被声明为 IQueryable<CustomerViewModel>
类型。
您可以通过将 thecustomer
变量声明更改为合适的类型来轻松修复它,例如 var
或 IQueryable<dynamic>
或其他能够容纳 IQueryable
的类型匿名类型值:
var thecustomer = (
from p in datacontext
select new {
customer_id = p.vessel_idx,
customer_name = p.customer_name
})
.Union ((
from p in datacontext
select new {
customer_id = p.vessel_idx,
customer_name = p.customer_name
}));
同意@har07,两个查询都使用相同的匿名类型投影结果(它们共享相同的 属性 名称和类型)。问题是 thecustomer
变量是 IQueryable<CustomerViewModel>
。解决此问题的另一种方法是将您的查询投影到您的 ViewModel class:
IQueryable<CustomerViewModel> thecustomer = (
from p in datacontext
select new CustomerViewModel{
customer_id = p.vessel_idx,
customer_name = p.customer_name
})
.Union ((
from p in datacontext
select new CustomerViewModel{
customer_id = p.vessel_idx,
customer_name = p.customer_name
}));
在这种情况下,我假设您的视图模型 class 具有与您的匿名类型同名的属性,但您可以在方便时更改这些属性。