如何解决从Ormlite返回自定义对象的值元组
我正在尝试对2个表进行简单的Join,并返回这两个表的值元组。
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
中的OrmLiteUtils
仅具有用于字符串,int,DateTime等基本类型的转换器,并且GetConverter(fieldType)是自定义对象的类型时返回null。
有没有解决的办法?还是以某种方式返回更复杂的自定义对象的值元组,而不是仅返回基本元组(如int id,字符串名称,DateTime时间)?
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>();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。