0

我试图将变量声明为返回匿名类型对象的对象。我收到一个错误,例如(无法将类型 Anonymous1 隐式转换为 Anonymous2。

var queryResult = new object();

            if (check == 1)
            {
                queryResult = context.SubjectContext
                    .Where(x => x.CreatedBy == CreatedBy)
                    .Select(x => new { x.Id, x.Name });
            }
            else (check == 2)
            {
                queryResult = context.SubjectContext
                    .Where(x => x.CreatedBy == CreatedBy)
                    .Select(x => new { x.Id, x.Name, x.Skillset });
            }


            if (queryResult.Any())
            {
                return jsonRetrunMsg = new JsonReturn { Status = "success", Message = queryResult };
            }
            else
            {
                return jsonErrorMsg = new JsonError { Status = "error", Message = "Check User Id" };
            }
4

2 回答 2

1

我建议你创建一个类,因为它们在领域上有相似之处

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Skillset { get; set; }
}

你的代码将是这样的。

object queryResult;

if (check == 1)
{
    queryResult = context.SubjectContext
        .Where(x => x.CreatedBy == CreatedBy)
        .Select(x => new Student() { Id = x.Id, Name = x.Name });
}
else (check == 2)
{
    queryResult = context.SubjectContext
        .Where(x => x.CreatedBy == CreatedBy)
        .Select(x => new Student() { Id = x.Id, Name = x.Name, Skillset = x.Skillset });
}

if (queryResult.Any())
{
    return jsonRetrunMsg = new JsonReturn { Status = "success", Message = queryResult };
}
else
{
    return jsonErrorMsg = new JsonError { Status = "error", Message = "Check User Id" };
}
于 2014-01-23T11:58:58.280 回答
1

尽管您从相同的上下文中进行选择,在本例中为“SubjectContext”,但您正在创建一个新类型,执行此操作时:

.Select(x => new { x.Id, x.Name });

还有这个;

.Select(x => new { x.Id, x.Name, x.Skillset });

因此,在这种情况下,您必须返回一个隐式类型变量,称为“var”。像这样的东西:

var queryResult = context.SubjectContext
        .Where(x => x.CreatedBy == CreatedBy)
        .Select(x => new { x.Id, x.Name });

当然,在这种情况下 - 您在括号之间使用它 - 您必须在返回之前更改“queryResult”的声明并控制结果。像这样的东西:

   if (check == 1)
   {
        var queryResult = context.SubjectContext
            .Where(x => x.CreatedBy == CreatedBy)
            .Select(x => new { x.Id, x.Name });

        if (queryResult.Any())
        {
            return jsonRetrunMsg = new JsonReturn { Status = "success", Message = queryResult };
        }
        else
        {
            return jsonErrorMsg = new JsonError { Status = "error", Message = "Check User Id" };
        }

    } else if (check == 0)
    {
        var queryResult = context.SubjectContext
            .Where(x => x.CreatedBy == CreatedBy)
            .Select(x => new { x.Id, x.Name, x.Skillset });

        if (queryResult.Any())
        {
            return jsonRetrunMsg = new JsonReturn { Status = "success", Message = queryResult };
        }
        else
        {
            return jsonErrorMsg = new JsonError { Status = "error", Message = "Check User Id" };
        }
    }

在这种情况下,var queryResult 将假定您的 Linq 查询中返回/创建的类型的类型,并且不会发生错误。

好吧,阅读评论,我为您找到了另一个解决方案,我想它会起作用,试一试。

using System.Collections;
object queryResult;
        if (check == 1)
        {
            queryResult = context.SubjectContext
                .Where(x => x.CreatedBy == CreatedBy)
                .Select(x => new { x.Id, x.Name });

        } else if (check == 0)
        {
            queryResult = context.SubjectContext
                .Where(x => x.CreatedBy == CreatedBy)
                .Select(x => new { x.Id, x.Name, x.Skillset });
        }

        if ((queryResult != null) && ((queryResult as ICollection).Count > 0))
        {
            return jsonRetrunMsg = new JsonReturn { Status = "success", Message = queryResult };
        }
        else
        {
            return jsonErrorMsg = new JsonError { Status = "error", Message = "Check User Id" };
        }

猜猜你可以想办法避免这么多代码,但是,它现在可以工作。胜利者。

于 2014-01-23T12:25:31.763 回答