从 Ormlite 返回自定义对象的值元组
Returning a Value Tuple of Custom Objects From Ormlite
我正在尝试对 2 个表进行简单的连接,return 这两个表的值元组。
public partial class DeliveryMethod
{
[Required]
[PrimaryKey]
public int DeliveryMethodId { get; set; }
[References(typeof(Event))]
[Required]
public string EventId { get; set; }
[References(typeof(DeliveryType))]
[Required]
public short DeliveryTypeId { get; set; }
[Required]
public int MappedValue { get; set; }
}
public partial class DeliveryType
{
[Required]
[PrimaryKey]
public short DeliveryTypeId { get; set; }
[Required]
public string DeliveryTypeDescription { get; set; }
}
public List<(DeliveryMethod deliveryMethod, DeliveryType deliveryType)> GetDeliveries(string eventId)
{
using (var db = DbFactory.OpenDbConnection(...))
{
var q = db.From<DeliveryMethod>()
.Join<DeliveryType>((dm, dt) => dm.DeliveryType == dt.DeliveryType)
.Where(dm => dm.EventId == eventId)
.Select<DeliveryMethod, DeliveryType>((dm, dt) =>
new {dm, dt});
return db.Select<(DeliveryMethod deliveryMethod, DeliveryType deliveryType)>(q);
}
}
但是,当我 运行 这样做时,我得到一个 NullReferenceException。这似乎是因为 ConvertToValueTuple
in OrmLiteUtils
只有基本类型的转换器,如 string、int、DateTime 等,而 GetConverter(fieldType) returns null 当它是一种自定义类型时对象。
有解决办法吗?或者某种方式 return 更复杂的自定义对象的值元组,而不是像 (int id, string name, DateTime time) 这样的基本元组?
P.S。我试图通过简化 类 来简化我的问题,所以如果我在那里犯了错误,我为此深表歉意,但我认为你可以理解我的问题背后的基本思想。
您只能通过选择列而不是整个表格来使用 OrmLite's C# 7 Tuple support,例如:
.Select<DeliveryMethod, DeliveryType>((dm, dt) =>
new {dm.EventId, dt.DeliveryMethodId});
var results = db.Select<(string, int)>(q);
对于选择整个表结帐 OrmLite's SelectMulti API,例如:
var q = db.From<DeliveryMethod>()
.Join<DeliveryType>((dm, dt) => dm.DeliveryType == dt.DeliveryType)
.Where(dm => dm.EventId == eventId);
var results = db.SelectMulti<DeliveryMethod, DeliveryType>();
我正在尝试对 2 个表进行简单的连接,return 这两个表的值元组。
public partial class DeliveryMethod
{
[Required]
[PrimaryKey]
public int DeliveryMethodId { get; set; }
[References(typeof(Event))]
[Required]
public string EventId { get; set; }
[References(typeof(DeliveryType))]
[Required]
public short DeliveryTypeId { get; set; }
[Required]
public int MappedValue { get; set; }
}
public partial class DeliveryType
{
[Required]
[PrimaryKey]
public short DeliveryTypeId { get; set; }
[Required]
public string DeliveryTypeDescription { get; set; }
}
public List<(DeliveryMethod deliveryMethod, DeliveryType deliveryType)> GetDeliveries(string eventId)
{
using (var db = DbFactory.OpenDbConnection(...))
{
var q = db.From<DeliveryMethod>()
.Join<DeliveryType>((dm, dt) => dm.DeliveryType == dt.DeliveryType)
.Where(dm => dm.EventId == eventId)
.Select<DeliveryMethod, DeliveryType>((dm, dt) =>
new {dm, dt});
return db.Select<(DeliveryMethod deliveryMethod, DeliveryType deliveryType)>(q);
}
}
但是,当我 运行 这样做时,我得到一个 NullReferenceException。这似乎是因为 ConvertToValueTuple
in OrmLiteUtils
只有基本类型的转换器,如 string、int、DateTime 等,而 GetConverter(fieldType) returns null 当它是一种自定义类型时对象。
有解决办法吗?或者某种方式 return 更复杂的自定义对象的值元组,而不是像 (int id, string name, DateTime time) 这样的基本元组?
P.S。我试图通过简化 类 来简化我的问题,所以如果我在那里犯了错误,我为此深表歉意,但我认为你可以理解我的问题背后的基本思想。
您只能通过选择列而不是整个表格来使用 OrmLite's C# 7 Tuple support,例如:
.Select<DeliveryMethod, DeliveryType>((dm, dt) =>
new {dm.EventId, dt.DeliveryMethodId});
var results = db.Select<(string, int)>(q);
对于选择整个表结帐 OrmLite's SelectMulti API,例如:
var q = db.From<DeliveryMethod>()
.Join<DeliveryType>((dm, dt) => dm.DeliveryType == dt.DeliveryType)
.Where(dm => dm.EventId == eventId);
var results = db.SelectMulti<DeliveryMethod, DeliveryType>();