2

阅读文档后,我不确定,但我得出的结论是,在创建 QueryDb 时,您不能选择要加入的列?而且我的印象是,您必须要复制到 DTO 对象?您不能复制到常规对象或动态对象?

public class SampleAutoQueryDb : QueryDb<MailResponseDetailOrm, object>, ILeftJoin<MailResponseDetailOrm, MailResponseOrm> { }

任何人都可以提供有关将我的 MailResponseOrm 加入 MailResponseDetailOrm 的任何见解。MailResponseDetailOrm 有 5 个字段,即Email地址。我也希望 MailResponseOrm 也能加入其中Email。我也不想改变任何一个列名。我是否必须创建自定义实现或服务才能做到这一点?

更新

这是我的代码,如下所示:

        [Alias("MailReportsDetail")]
        public class MailResponseDetailOrm
        {
            public string Email { get; set; }

            public int ID { get; set; }

            [Alias("RespDate")]
            public DateTime? AddedDateTime { get; set; }

            [Alias("DLReport")]
            public string Action { get; set; }

            public string ActionDetail { get; set; }

            public string IP { get; set; }

            public string UserAgent { get; set; }

            public string EmailReferrer { get; set; }
        }

    [Alias("MailReports")]
    public class MailResponseOrm
    {
        public int ID { get; set; }

        public string Email { get; set; }

        public string Address1 { get; set; }

        public string Address2 { get; set; }

        public string City { get; set; }

        public string Company { get; set; }

        public string Contact { get; set; }

        public string Country { get; set; }

        [Alias("LastMail")]
        public DateTime? ModifiedDateTime { get; set; }

        [Alias("LastReport")]
        public string Action { get; set; }

        public DateTime? OptOut { get; set; }

        public string Part { get; set; }

        public string Phone { get; set; }

        public string PostalCode { get; set; }

        public string Source { get; set; }

        public string State { get; set; }

        public string Title { get; set; }

        #region Obsolete

        [Obsolete]
        public string Class { get; set; }

        [Obsolete]
        public string IP { get; set; }

        #endregion
    }

public class SampleAutoQueryDb : QueryDb<MailResponseDetailOrm> { }

public class MyQueryServices : Service
{
    public IAutoQueryDb AutoQuery { get; set; }

    // Override with custom implementation
    public object Any(SampleAutoQueryDb query)
    {
        var q = AutoQuery.CreateQuery(query, base.Request);
        q.Join<MailResponseDetailOrm, MailResponseOrm>((x, y) => x.Email == y.Email)
            // .Select<MailResponseDetailOrm, MailResponseOrm>((x, y) => new { x.ID, y.Email })
            ;
        return AutoQuery.Execute(query, q);
    }
}
4

2 回答 2

2

AutoQuery中的联接需要使用OrmLite 的联接引用约定,并且所有 AutoQuery 服务结果都在 Typed DTO 中返回,默认情况下是要查询的表,或者您可以使用QueryDb<From,Into>基类返回来自多个联接表的列的自定义结果

如果您需要超出此范围的自定义,则需要使用自定义自动查询实现或您自己的服务实现,例如:

public class SampleAutoQueryDb : QueryDb<MailResponseDetailOrm> { }

public class MyQueryServices : Service
{
    public IAutoQueryDb AutoQuery { get; set; }

    // Override with custom implementation
    public object Any(SampleAutoQueryDb query)
    {
        var q = AutoQuery.CreateQuery(query, base.Request);
        q.Join<MailResponseDetailOrm,MailResponseOrm>((x, y) => x.Email == y.Email);
        return AutoQuery.Execute(query, q);
    }
}
于 2018-05-23T18:55:57.807 回答
2

// 在类中未专门设置的字段名称上连接 2 个对象的查询。

var q = Db.From<MailResponseDetailOrm>().Join<MailResponseDetailOrm>(x,y) => x.Email = y.Email);

// 运行查询

var results = Db.Select(q);
于 2018-05-23T19:19:55.703 回答