我试图将变量声明为返回匿名类型对象的对象。我得到一个错误(不能隐式地将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" };
}
答案 0 :(得分: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" };
}
答案 1 :(得分: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 Query中返回/创建的类型,并且不会出现错误。
好吧,阅读评论后,我为你找到了另一种解决方案,我想它会起作用,只需试一试。
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" };
}
猜猜你可以考虑一些东西来避免这么多代码,但是,它现在都可以使用。 胜者。