我试图在没有创建映射它的模型的情况下执行查询。考虑一下这个片段
public IDictionary<string, int> GetParentelaMapping()
{
using (var conn = dataContextFactory.Create())
{
var result = conn.Query<dynamic>("SELECT ID_GRADO_PARENTELA,GRADO_PARENTELA FROM GRADO_PARENTELA")
.ToDictionary(
row => (string)row.GRADO_PARENTELA,
row => (int)row.ID_GRADO_PARENTELA, StringComparer.OrdinalIgnoreCase);
return result;
}
}它给了我一个例外,Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:''int‘不包含’GRADO_PARENTELA‘的定义。
我该如何处理这种情况呢?谢谢
发布于 2019-02-05 13:58:05
不幸的是,目前不支持此功能。跟踪新的第1591期。
作为一种解决办法,我建议为读取这样的结果定义额外的类:
class ParentelaMapping
{
public int ID_GRADO_PARENTELA { get; set; }
pulbic string GRADO_PARENTELA { get; set; }
}
public IDictionary<string, int> GetParentelaMapping()
{
using (var conn = dataContextFactory.Create())
{
var result = conn.Query<ParentelaMapping>("SELECT ID_GRADO_PARENTELA,GRADO_PARENTELA FROM GRADO_PARENTELA")
.ToDictionary(
row => row.GRADO_PARENTELA,
row => row.ID_GRADO_PARENTELA, StringComparer.OrdinalIgnoreCase);
return result;
}
}附注:
linq2db旨在更好地处理linq查询,因此考虑以以下方式重写查询:
[Table("GRADO_PARENTELA")]
class GrandoParentela
{
public int ID_GRADO_PARENTELA { get; set; }
pulbic string GRADO_PARENTELA { get; set; }
}
public IDictionary<string, int> GetParentelaMapping()
{
using (var conn = dataContextFactory.Create())
{
var result = conn.GetTable<GrandoParentela>()
.ToDictionary(
row => row.GRADO_PARENTELA,
row => row.ID_GRADO_PARENTELA, StringComparer.OrdinalIgnoreCase);
return result;
}
}https://stackoverflow.com/questions/54530251
复制相似问题