如何使用Npoco FetchOneToMany?如何使用、Npoco、FetchOneToMany

2023-09-04 03:03:55 作者:心已碎ㄨ谁来慰

我想使用 Npoco 但运行到一些问题FetchOneToMany

我有一个SQL语句连接两个表一起,我输出的所有列。

  [表名(表A)]
    [PrimaryKey的(ID)
    公共类表A
    {
        公众诠释编号{获得;组; }
        公开日期时间EFFECTIVEDATE {获得;组; }
         公众的IList<表B> TableBs {获得;组; }
    }

    [表名(表B)]
    [PrimaryKey的(TableBId)]
    公共类表B
    {
        公众诠释TableBId {获得;组; }
        公众诠释SomeNumber {获得;组; }
          公众诠释编号{获得;组; } // TableA的ID
    }


FUNC<表A,对象> FUNC1 =(X)=> x.Id;
            FUNC<表B,对象> FUNC2 =(X)=> x.Id;
  VAR测试= RelationExtensions.FetchOneToMany< AdminFeeBandGroup,AdminFeeBand>(unitOfWork.Db,FUNC1,FUNC2,SQL,1,1,2012年10月18日,2012年10月22日);
 

我传入我真正的查询4个参数。我得到的结果回来, TableBs财产填充,看起来不错。然而EFFECTIVEDATE不填充由于某种原因,是默认的C#的时间。

我在想什么?

修改

如何在Mac上使用FoneLab Screen Recorder捕捉视频

这是我为我的查询

  SELECT TableA.Id,TableA.EffectiveDate,TableB.TableBId,TableB.SomeNumber
从表A INNER JOIN
                      表B ON TableA.Id = TableB.Id
WHERE(TableA.EffectiveDate = @ 0)


FUNC<表A,对象> FUNC1 =(X)=> x.Id;
            FUNC<表B,对象> FUNC2 =(X)=> x.Id;
  VAR测试= RelationExtensions.FetchOneToMany< AdminFeeBandGroup,AdminFeeBand>(unitOfWork.Db,FUNC1,FUNC2,SQL,2012年10月18日);
 

解决方案

这是它应该是如何工作的。

  VAR SQL =选择*,b从tableA的。*
    内部联接表B B上的a.id = b.id
    其中,EFFECTIVEDATE = @ 0

名单<表A>结果=
    db.FetchOneToMany<表A,表B>(X => x.Id,SQL,新的日期时间(2012,10,18))
 

您必须确保你的列是在相同的顺序的一般参数列选择

I am trying to use Npoco but running into some problems with FetchOneToMany

I have a sql statement that joins 2 tables together and I output all the columns.

   [TableName("TableA")]
    [PrimaryKey("Id")]
    public class TableA
    {
        public int Id { get; set; }
        public DateTime EffectiveDate { get; set; }
         public IList<TableB> TableBs { get; set; }
    }

    [TableName("TableB")]
    [PrimaryKey("TableBId")]
    public class TableB
    {
        public int TableBId { get; set; }
        public int SomeNumber { get; set; }
          public int Id { get; set; } // TableA id
    }


Func<TableA, object> func1 = (x) => x.Id;
            Func<TableB, object> func2 = (x) => x.Id;
  var test = RelationExtensions.FetchOneToMany<AdminFeeBandGroup, AdminFeeBand>(unitOfWork.Db, func1,func2,sql, 1,1,"10-18-2012","10-22-2012");

I am passing 4 parameters in my real query. I get a result back and TableBs property is filled and looks good. However EffectiveDate is not filled for some reason and is the default C# time.

What am I missing?

Edit

This is what I have as my query

SELECT     TableA.Id, TableA.EffectiveDate, TableB.TableBId, TableB.SomeNumber
FROM         TableA INNER JOIN
                      TableB ON TableA.Id = TableB.Id
WHERE     (TableA.EffectiveDate = @0)


Func<TableA, object> func1 = (x) => x.Id;
            Func<TableB, object> func2 = (x) => x.Id;
  var test = RelationExtensions.FetchOneToMany<AdminFeeBandGroup, AdminFeeBand>(unitOfWork.Db, func1,func2,sql, "10-18-2012");

解决方案

This is how it should work.

var sql = "select a.*, b.* from tablea a 
    inner join tableb b on a.id = b.id 
    where EffectiveDate = @0"

List<TableA> results = 
    db.FetchOneToMany<TableA,TableB>(x=>x.Id, sql, new DateTime(2012,10,18))

You must ensure your columns are selected in the same order that the generic parameters are listed.