从 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>();