LINQ to SQL with if语句

时间:2019-09-17 18:30:44

标签: c# linq

我有一个:

            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();

如果条件允许,我该如何使用它?

2 个答案:

答案 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();