我正在尝试在.net中使用SqlHierarchyId
在我的控制器中,我使用匿名类型从数据库获取值。
[HttpGet("{id}")]
public async Task<ActionResult<object>> GetDomain(int id)
{
object domain = from x in _context.Domains.Where(x => x.DomainId == id)
select new
{
Id = x.DomainId,
Name = x.DomainName,
Type = x.DomainTypeId,
Parent = x.Parentt,
Path = x.Level.ToString()
};
return domain;
}
然后,我想获取要转换为SqlHierarchyId的路径,以应用.Net支持的不同方法
我尝试过反射:
System.Type type = domain.GetType();
string strNode = (string) type.GetProperty("Path").GetValue(domain, null);
我有此错误:
System.NullReferenceException:对象引用未设置为实例一个对象。
当调试代码时,我发现strNode为空,但是域包含了我用Postman测试时所需的所有值。
我尝试动态:
dynamic dyn= domain;
string strNode= dyn.Path;
我有这个错误:
Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable <<> f__AnonymousType1>'不包含“路径”>的定义
我也尝试了在类似的问题上找到了其他一些命题(克隆,将匿名类型定义为类...),但没有结果。
注意:
我尝试使用匿名类型,因为当直接使用我的模型时我无法获取值。我有一个类似的转换错误。无法将类型为'Microsoft.SqlServer.Types.SqlHierarchyId'的对象转换为类型为'Microsoft.Data.SqlClient.Server.IBinarySerialize'。
但是通过匿名,我能够获取值,所以我想访问这些值并将其立即传递给我的模型。
我正在尝试在.net中使用SqlHierarchyId。在我的控制器中,我正在使用匿名类型从数据库获取值。 [HttpGet(“ {id}”)]公共异步任务
您的问题是domain
实际上是匿名对象的IEnumerable
。即使只有一个实例,select
语句也会生成IEnumerable
。