NBear使用时遇到参数是数组时的问题

1 view
Skip to first unread message

寻路者

unread,
Dec 5, 2006, 7:01:43 AM12/5/06
to NBear Google Group
public interface T_Sell:Entity
{
[PrimaryKey]
Guid ID
{
get;
set;
}

string Fac_Code
{
get;
set;
}

string City_ID
{
get;
set;
}

[NotNull]
DateTime Log_Time
{
get;
set;
}

[FkReverseQuery(LazyLoad=true)]
T_Factory Factory
{
get;
set;
}

[FkReverseQuery(LazyLoad = true)]
T_Area_City AreaCity
{
get;
set;
}
该表有2个外键,分别是City_ID(0对应表
T_Area_City),Fac_Code(对应表T_Factory)
现在要求查询:一个厂家在某一城市或某几个城市的销售记录.
储存过程SQL语句:select * from T_Sell
where(fac_code=0 and (city_ID=01 or city_ID=02))
这样City_ID就变成一个数组参数,这样的话要怎么用GateWay解决?

Teddy

unread,
Dec 5, 2006, 7:17:22 AM12/5/06
to nbear...@googlegroups.com
可以在使用 Gateway.FindArray<T_Sell>(TSell._.Fac_Code == "0" & (TSell._.City_ID == 1 | TSell._..City_ID == 2) ) 这样的语法来查询。
 
Teddy

 

寻路者

unread,
Dec 5, 2006, 7:26:14 AM12/5/06
to NBear Google Group
我是这样写的
T_Sell[] GetSaleDataByCity(string fac_Code, string[] City_ID)
{
int i;
for (i = 0; i < City_ID.Length;i++)
{
return Gateway.Default.FindArray<T_Sell>((fac_Code ==
T_Sell._.Fac_Code) & (City_ID[i] == T_Sell._.City_ID),
OrderByClip.Default);
}
}
编译的时候没法通过是什么原因?

Teddy

unread,
Dec 5, 2006, 7:42:07 AM12/5/06
to nbear...@googlegroups.com
你的代码让人看不懂,循环里面一个return,第一次执行return就会退出循环和整个函数,你要的逻辑完全达不到,思路混乱!!

 
On 12/5/06, 寻路者 <1814...@qq.com> wrote:

寻路者

unread,
Dec 5, 2006, 8:36:01 PM12/5/06
to NBear Google Group
我现在要实现上面的方法,要怎样来传递City_ID的值呢?

Jason Ye

unread,
Dec 5, 2006, 8:46:39 PM12/5/06
to NBear Google Group
new 一个
WhereClip,再循环构造这个whereclip,最后传到FindArray方法中。

Teddy

unread,
Dec 5, 2006, 8:48:04 PM12/5/06
to nbear...@googlegroups.com
       T_Sell[] GetSaleDataByCity(string fac_Code, string[] City_ID)
       {
           WhereClip whereFacCode = fac_Code == T_Sell._.Fac_Code;
           WhereClip whereCities = null;
           if (City_ID != null)
           {
               if (City_ID > 0)
               {
                   whereCities = City_ID[0] == T_Sell._.City_ID;
                   for (int i = 1; i < City_ID.Length; i++)
                   {
                       whereCities = whereCities | City_ID[i] == T_Sell._.City_ID;
                   }
               }
           }
           WhereClip where = (whereCities == null ? whereFacCode : whereFacCode & whereCities);
           return Gateway.Default.FindArray<T_Sell>(where, OrderByClip.Default);
       }


 
On 12/6/06, 寻路者 <1814...@qq.com> wrote:
我现在要实现上面的方法,要怎样来传递City_ID的值呢?

寻路者

unread,
Dec 5, 2006, 9:24:25 PM12/5/06
to NBear Google Group
十分感谢你的回复!!

寻路者

unread,
Dec 11, 2006, 4:32:17 AM12/11/06
to NBear Google Group
今天在运行这段代码的时候当City的数目超过400时,会出现嵌套太多的错误提示.
如果利用SQL语句进行查询,如何把结果传递给实体?

Teddy

unread,
Dec 11, 2006, 4:43:57 AM12/11/06
to nbear...@googlegroups.com
你可以试试最新的v3.4.0版中的In方法。
 
       T_Sell[] GetSaleDataByCity(string fac_Code, string[] City_ID)
       {
           return Gateway.Default.FindArray<T_Sell>(fac_Code == T_Sell._.Fac_Code & T_Sell._.City_ID.In(City_ID), OrderByClip.Default);
       }
 
这样就行了,是不是简单很多呢?
 
Teddy

 
On 12/11/06, 寻路者 <1814...@qq.com> wrote:
今天在运行这段代码的时候当City的数目超过400时,会出现嵌套太多的错误提示.
如果利用SQL语句进行查询,如何把结果传递给实体?


寻路者

unread,
Jan 29, 2007, 1:07:10 AM1/29/07
to NBear Google Group
今天在整理代码时,怎么没有找到你提供的IN方法,只有LIKE方法.

On 2006年12月11日, 下午5时43分, Teddy <shijie...@gmail.com> wrote:
> 你可以试试最新的v3.4.0版中的In方法。
> 下载地址:http://www.codeplex.com/nbear/Release/ProjectReleases.aspx
>
> T_Sell[] GetSaleDataByCity(string fac_Code, string[] City_ID)
> {
> return Gateway.Default.FindArray<T_Sell>(fac_Code ==
> T_Sell._.Fac_Code & T_Sell._.City_ID.In(City_ID), OrderByClip.Default);
> }
>
> 这样就行了,是不是简单很多呢?
>
> Teddy
>

> On 12/11/06, 寻路者 <181443...@qq.com> wrote:
>
>
>
>
>
> > 今天在运行这段代码的时候当City的数目超过400时,会出现嵌套太多的错误提示.
> > 如果利用SQL语句进行查询,如何把结果传递给实体?- 隐藏被引用文字 -- 显示引用的文字 -

Teddy

unread,
Jan 29, 2007, 1:13:55 AM1/29/07
to nbear...@googlegroups.com
这个InSubQuery方法比较特别,定义在Gateway里的,是一个Gateway的方法,返回一个WhereClip。
 
Teddy

 

寻路者

unread,
Jan 29, 2007, 1:26:56 AM1/29/07
to NBear Google Group
我怎么找不到这个方法?版本也更新的最新.

On 1月29日, 下午2时13分, Teddy <shijie...@gmail.com> wrote:
> 这个InSubQuery方法比较特别,定义在Gateway里的,是一个Gateway的方法,返回一个WhereClip。
>
> Teddy
>
> On 1/29/07, 寻路者 <181443...@qq.com> wrote:
>
>
>
>
>
> > 今天在整理代码时,怎么没有找到你提供的IN方法,只有LIKE方法.
>
> > On 2006年12月11日, 下午5时43分, Teddy <shijie...@gmail.com> wrote:
> > > 你可以试试最新的v3.4.0版中的In方法。
> > > 下载地址:http://www.codeplex.com/nbear/Release/ProjectReleases.aspx
>
> > > T_Sell[] GetSaleDataByCity(string fac_Code, string[] City_ID)
> > > {
> > > return Gateway.Default.FindArray<T_Sell>(fac_Code ==
> > > T_Sell._.Fac_Code & T_Sell._.City_ID.In(City_ID), OrderByClip.Default);
> > > }
>
> > > 这样就行了,是不是简单很多呢?
>
> > > Teddy
>
> > > On 12/11/06, 寻路者 <181443...@qq.com> wrote:
>
> > > > 今天在运行这段代码的时候当City的数目超过400时,会出现嵌套太多的错误提示.
> > > > 如果利用SQL语句进行查询,如何把结果传递给实体?- 隐藏被引用文字 -- 显示引用的文字 -- 隐藏被引用文字 -- 显示引用的文字 -

Teddy

unread,
Jan 29, 2007, 1:54:37 AM1/29/07
to nbear...@googlegroups.com
就是gateway.InSubQuery方法,随便试试就能看到了。不是静态方法。
 
Teddy

 
On 1/29/07, 寻路者 <1814...@qq.com> wrote:

寻路者

unread,
Jan 29, 2007, 2:43:05 AM1/29/07
to NBear Google Group
终于找到了,不过看不明白InSubQuery里面每个参数的意思,能解释下么?

On 1月29日, 下午2时54分, Teddy <shijie...@gmail.com> wrote:
> 就是gateway.*InSubQuery*方法,随便试试就能看到了。不是静态方法。
>
> Teddy

Teddy

unread,
Jan 29, 2007, 2:45:18 AM1/29/07
to nbear...@googlegroups.com
举个例子:
 
gateway.FindArray<order>(order._.updatetime > DateTime.Parse("2006-1-1") & gateway.InSubQuery<salesuser>(order._.userid, salesuser._.id, WhereClip.All ), OrderBy.Default)
 
总之InSubQuery返回的是一个WhereClip就是了。
 
Teddy
 
On 1/29/07, 寻路者 <1814...@qq.com> wrote:
Reply all
Reply to author
Forward
0 new messages