我有一个:
var query = db.vw_web_GetAccounts; //a sql view
if (some condition)
{
query.Where(...);
}
else
{
query.Where(...);
}
query.Select(a => new AccountVM
{
Name = a.Name,
....
});
return query.ToList();
我想退回List<AccountVM>
存在编译错误:
Error CS0029 Cannot implicitly convert type 'System.Data.Entity.DbSet<vw_web_GetAccounts>' to 'System.Collections.Generic.List<AccountVM>'
没有if条件示例:它按预期工作
var query = db.vw_web_GetAccounts
.Where(...)
.Select(a => new AccountVM
{
Name = a.Name,
....
});
return query.ToList();
如果条件允许,我该如何使用它?
答案 0 :(得分:3)
您需要输入第一条语句。同样在显示的代码中,您缺少分配。
var query = db.vw_web_GetAccounts as IQueryable<vw_web_GetAccounts>;
if (some condition)
{
query = query.Where(...);
}
else
{
query = query.Where(...);
}
return query.Select(a => new AccountVM
{
Name = a.Name,
....
}).ToList();
答案 1 :(得分:0)
您遇到的错误与if
条件无关,但问题在于方法的返回类型为List<AccountVM>
,但返回值的类型为DbSet<vw_web_GetAccounts>
一种解决方案是ternary operator
,在Where
子句中包含条件,其余与在没有if
条件版本的情况下相同:
var query = db.vw_web_GetAccounts.Where(a => condition ? (...) : (...)).Select(a =>
new AccountVM
{
Name = a.Name,
....
});
return query.ToList();