XPO學習系列3--條件物件
XPO的條件相關類。
XPO的條件物件用來生成資料篩選條件,實際就是SQL語句條件語法樹(條件表示式的組合)的物件表示方法。
一、主要相關類:
1、繼承於抽象類CriteriaOperator的類系列。
繼承於CriteriaOperator的子類有:
BetweenOperator
取範圍的條件表示式類,如:1000 <= Total Price <= 2000
BinaryOperator
二元表示式類,最基本的表示式,比如:TotalPrice>100
ContainsOperator
包含表示式類,比如:exists
GroupOperator
組合表示式類,利用它進行反覆巢狀組合,可以組成任意複雜的條件樹。
InOperator
在某個值列表範圍內的表示式,可以認為是SQL中的in
NotOperator
取反表示式,對應SQL中的not
NullOperator
取空值表示式,對應SQL中的 IsNull
2、輔助CriteriaOperator的CriteriaOperand類系列。
繼承於抽象類CriteriaOperand的子類有:
AggregateOperand
聚合操作,可以在此時使用各種聚合函式(以列舉方式提供),類似於groupby 再加Having
OperandProperty
表示式中的引用類成員(實體類(XPPersistent)的可持久化的屬性(property)或欄位(field))。對應的就是表字段。
OperandValue
表示式中的值
OperandValueBase
OperandValue的基類。
二、詳細描述:
(A)、條件物件系列:
CriteriaOperator
條件運算類是所有條件物件的抽象基類。沒有任何具體方法,只是在類上加了屬性Serializable。(看來Dev是想讓大家手動以序列化方式持久)。
BetweenOperator
範圍運算類:用來表示某個值範圍的條件表示式。
建構函式:
public BetweenOperator(CriteriaOperand objectProperty, CriteriaOperand leftOperand, CriteriaOperand rightOperand)
public BetweenOperator(string property, CriteriaOperand leftOperand, CriteriaOperand rightOperand) : this(new OperandProperty(property), leftOperand, rightOperand)
比如:1000 <= Total Price <= 2000 寫成new BetweenOperator("TotalPrice", 1000, 2000))
BinaryOperator
二元運算物件,也就是一個二元運算表示式。
建構函式:
public BinaryOperator(CriteriaOperand opLeft, CriteriaOperand opRight, BinaryOperatorType type)
public BinaryOperator(string propertyName, object value, BinaryOperatorType type) :
this(new OperandProperty(propertyName), new OperandValue(value), type)
引數type的型別BinaryOperatorType是二元操作符列舉,看名稱就知道意思啦。
BinaryOperatorType{ Equal, Greater , GreaterOrEqual , Less , LessOrEqual , Like, NotEqual }
比如:TotalPrice>100 寫成: new BinaryOperator("TotalPrice", 10, BinaryOperatorType.Greater)
ContainsOperator
包含表示式:
這個原始文件是:Used in a search criteria to filter collection contents.
大家知道兩個實體類之間是一對多或多對多時,其中一個對另一個類的引用是通過XPCollection型別實現的。對此型別的屬性或欄位的篩選就必須使用ContainsOperator
建構函式:
public ContainsOperator(OperandProperty objectProperty, CriteriaOperator operand)
public ContainsOperator(string property, CriteriaOperator operand) : this(new OperandProperty(property), operand)
比如兩個類:
public class Customer : XPObject
{
///<summary>
///有多個訂單,是聚集關係。
///</summary>
[Association("CustomerOrders", typeof (Order)), Aggregated]
public XPCollection Orders
{
get { return GetCollection("Orders"); }
}
}
///<summary>
///訂單
///</summary>
public class Order : XPObject
{
///<summary>
///訂單的所屬使用者
///</summary>
[Association("CustomerOrders")]
public Customer Customer;
///<summary>
///訂單金額
///</summary>
public Decimal Freight;
}
這連個類是一對多關係,我想查詢訂單金額等於1000的使用者。
XPCollection collection = new XPCollection(typeof(Customer),
new ContainsOperator("Orders ",new BinaryOperator("Freight ",1000,BinaryOperatorType.Equal));
實際是兩個條件物件的組合使用。
GroupOperator
組合表示式類,非常強大,利用它進行反覆巢狀組合,可以組成任意複雜的條件樹。
可以組合CriteriaOperator類系列的任何類,包括自身。
建構函式:
public GroupOperator(CriteriaOperator[] operands);
Operands are grouped by the GroupOperatorType.And type.
public GroupOperator(GroupOperatorType type, CriteriaOperator[] operands);
比如:有這麼四個類,使用者、角色、地址、訂單
它們之間的關係除使用者和訂單是一對多之外,其他都是多對多的關係。
///<summary>
///使用者
///</summary>
public class Customer : XPObject
{
public string Name = "";
public string CompanyName = "";
public string Phone = "";
public string Fax = "";
[ValueConverter(typeof(CodeConvertor))]
public string Sex="2";
///<summary>
///有多個訂單,是聚集關係。
///</summary>
[Association("CustomerOrders", typeof (Order)), Aggregated]
public XPCollection Orders
{
get { return GetCollection("Orders"); }
}
///<summary>
///一個使用者可以有多個地址
///</summary>
[Association("CustomerAddresses", typeof (Address))]
public XPCollection Addresses
{
get { return GetCollection("Addresses"); }
}
///<summary>
///角色,一個使用者可以在多個角色中。
///</summary>
[Association("CustomersGroups", typeof (Group))]
public XPCollection Groups
{
get { return GetCollection("Groups"); }
}
public Customer()
{
}
public Customer(string newName, string newCompanyName, string newPhone, string newFax)
{
Name = newName;
CompanyName = newCompanyName;
Phone = newPhone;
Fax = newFax;
}
}
///<summary>
///地址
///</summary>
public class Address : XPObject
{
public string Street = "";
///<summary>
///一個地址可能有多個使用者。
///</summary>
[Association("CustomerAddresses")]
public Customer Customer;
public Address()
{
}
public Address(string theStreet)
{
Street = theStreet;
}
}
///<summary>
///訂單
///</summary>
public class Order : XPObject
{
public DateTime OrderDate;
public DateTime RequiredDate;
public DateTime ShippedDate;
public int ShipVia;
///<summary>
///訂單金額
///</summary>
public Decimal Freight;
///<summary>
///訂單的所屬使用者
///</summary>
[Association("CustomerOrders")]
public Customer Customer;
public Order()
{
}
public Order(DateTime newOrderDate, DateTime newRequiredDate, DateTime newShippedDate, int newShipVia, Decimal newFreight)
{
OrderDate = newOrderDate;
RequiredDate = newRequiredDate;
ShippedDate = newShippedDate;
ShipVia = newShipVia;
Freight = newFreight;
}
}
///<summary>
///角色
///</summary>
public class Group : XPObject
{
public string Name = "";
///<summary>
///一個角色擁有的使用者
///</summary>
[Association("CustomersGroups", typeof (Customer))]
public XPCollection Customers
{
get { return GetCollection("Customers"); }
}
public Group()
{
}
public Group(string newName)
{
Name = newName;
}
}
查詢(角色是Administrator並且訂單金額大於20) 或者 家庭地址在天津的使用者的條件物件:
new GroupOperator
(
GroupOperatorType.Or,
new ContainsOperator("Addresses",new BinaryOperator("Street","天津",BinaryOperatorType.Equal)),
new GroupOperator
(
GroupOperatorType.And,
new ContainsOperator("Groups",new BinaryOperator("Name","Administrator",BinaryOperatorType.Equal)),
new ContainsOperator("Orders",new BinaryOperator("Freight",20,BinaryOperatorType.GreaterOrEqual))
)
)
InOperator
組成類似sql 表示式中in的表示式:
建構函式:
public InOperator(CriteriaOperand leftOperand, CriteriaOperand[] operands);
public InOperator(string propertyName, ICollection values);
很簡單,不用舉例
NotOperator
類似sql中的not操作。
建構函式:
public NotOperator(CriteriaOperator operand);
比如:new NullOperator("Company")
NullOperator
取空值。
建構函式
public NullOperator(string propertyName);
public NullOperator(OperandProperty operand);
比如:new NotOperator(new NullOperator("Company"))
(B)、條件物件的操作符系列:
CriteriaOperand
條件物件的操作符,包含運算數,運算子,運算物件等等,是個抽象類。
AggregateOperand
聚合操作,可以在此時使用各種聚合函式(以列舉方式提供),類似於groupby 再加Having 。
建構函式 :
public AggregateOperand(OperandProperty objectProperty, OperandProperty aggregateProperty, Aggregate type, CriteriaOperator criteria);
還是那些類,想查詢訂單金額總數小於100的人
new XPCollection(typeof(Customor), new BinaryOperator(new AggregateOperand(new OperandProperty("Orders"), new OperandProperty("Freight "),Aggregate.Sum,null), new OperandValue(100), BinaryOperatorType.Less))
可以看到使用了聚合函式型別列舉
public enum Aggregate{ Avg , Count , Max ,Min , None }
或者地址有類似於上海,並且該地址是唯一的:
new XPCollection(typeof(Cutomor), new BinaryOperator(new AggregateOperand("Addresses",
new BinaryOperator("Street", "上海%", BinaryOperatorType.Like)), new OperandValue(1), BinaryOperatorType.Equal))
OperandProperty
表示式中的引用類成員(實體類(XPPersistent)的可持久化的屬性(property)或欄位(field))。對應的就是表字段。
建構函式:
public OperandProperty(string propertyName);
例子上面都有了,要注意非持久化的類成員是不可以直接使用的。
OperandValue
表示式中的值。
建構函式:
public OperandValue(object value);
沒有什麼好說的。
OperandValueBase
OperandValue的基類。基本沒用。
相關推薦
XPO學習系列3--條件物件
XPO的條件相關類。 XPO的條件物件用來生成資料篩選條件,實際就是SQL語句條件語法樹(條件表示式的組合)的物件表示方法。 一、主要相關類: 1、繼承於抽象類CriteriaOperator的類系列。 繼承於CriteriaOperator的子類有:
【ODL-Openstack學習系列-04】-openflowplugin 氧版本連線分析
0 準備說明 版本:openflowplugin-release-oxygen-sr2 功能:openflow伺服器建立及連線物件流程; 1 啟動分析 1.1 blueprint配置檔案位置 OpenFlowPluginProvider
【ODL-Openstack學習系列-03】-openflowplugin be版本連線分析
0 準備 版本號:0.4.2 be版本 openflowplugin 1、連線入口 //01-連線發起源於初始化 OpenFlowPluginProviderImpl org/opendaylight/openflowplugin/impl/Ope
【ODL-Openstack學習系列-02】-vxlan隧道ovs手動構建及私網互通分析
ovs vxlan隧道手動搭建及私網互通測試 1 前言 學習了openstack一段時間,本人對於linux強大的網路功能充滿興趣,因為對於linux的網路功能包括nat、vxlan隧道配置等有了一定基礎,希望通過測試配置兩個私有網路,通過vxlan隧道配置實現私有網路在跨路由器
【ODL-Openstack學習系列-01】-odl-neutron北向抓包分析
前言 odl-neutron是與openstack對接的北向模組,通過抓包分析openstack下發至odl-neutron的北向資料,可以大致瞭解到neutron的北向模型,以及各種請求的基本資料,便於我們進一步學習odl-netvirt程式碼,同時對於neutron的業務建立邏輯有一
《ODL-Openstack學習系列-01》-odl-neutron北向抓包分析
前言 odl-neutron是與openstack對接的北向模組,通過抓包分析openstack下發至odl-neutron的北向資料,可以大致瞭解到neutron的北向模型,以及各種請求的基本資料,便於我們進一步學習odl-netvirt程式碼,同時對於neu
Windows API學習(3)-GetSystemDirectory
有時候,我們為了作業系統中的一個檔案,會為系統版本所為難,不同的作業系統,他們的系統目錄也是不相同的,所以微軟給我們提供了一個很好的函式GetSystemDirectory()函式,它可以獲得當前作業系統的路徑。一般結合
C#系列 ----- 3 值引用和物件引用
值型別和引用型別(Value Types Versus Reference Types) 上一篇對於type的定義其實不準確,在此給出更準確的定義。 所有的C#型別包括: Value types Reference types Generic type par
Git學習系列3 建立本地版本庫及新增檔案
在上一節 Git學習系列2 初配置及結構 完成之後,本節學習建立版本庫及新增檔案。 本節的演示環境為windows(10)系統。 一 選擇建立的路徑 選擇一個沒有中文的路徑。我的選擇的路徑為F:\github\git-learn. 在開始選單中啟動Git Ba
[GAN學習系列3]採用深度學習和 TensorFlow 實現圖片修復(上)
在之前的兩篇 GAN 系列文章--[GAN學習系列1]初識GAN以及[GAN學習系列2] GAN的起源中簡單介紹了 GAN 的基本思想和原理,這次就介紹利用 GAN 來做一個圖片修復的應用,主要採用的也是 GAN 在網路結構上的升級版--DCGAN,最初始的 GAN 採用的還是神經網路,即全連線網路,而 DC
[GAN學習系列3]採用深度學習和 TensorFlow 實現圖片修復(中)
上一篇文章--[GAN學習系列3]採用深度學習和 TensorFlow 實現圖片修復(上)中,我們先介紹了對於影象修復的背景,需要利用什麼資訊來對缺失的區域進行修復,以及將影象當做概率分佈取樣的樣本來看待,通過這個思路來開始進行影象的修復。 這篇文章將繼續介紹原文的第二部分,利用對抗生成網路來快速生成假圖片
[GAN學習系列3]採用深度學習和 TensorFlow 實現圖片修復(下)
這是本文的最後一部分內容了,前兩部分內容的文章: [GAN學習系列3]採用深度學習和 TensorFlow 實現圖片修復(上) [GAN學習系列3]採用深度學習和 TensorFlow 實現圖片修復(中) 以及原文的地址: bamos.github.io/2016/08/09/… 最後一
Jmeter學習系列----3 配置元件之計數器
for each 方便 thread 最大值 基於 增加 art pen long 在做測試時,會遇到一種需求:在大量數據的情況下,數據不能重復或者需要自增,基於這種形式,我們可以考慮使用計數器。 計數器(counter): 計數器配置允許用戶配置起始點,最大值和增
強化學習系列3:Open AI的baselines和Spinning Up
1. Baselines簡介 Baselines是一個傳統強化學習的資源庫,github地址為:https://github.com/openai/baselines Baselines需要python3的環境,建議使用3.6版本。安裝openmpi和相關庫(tensorflow、gym
深入機器學習系列3-邏輯迴歸
邏輯迴歸 1 二元邏輯迴歸 迴歸是一種很容易理解的模型,就相當於y=f(x),表明自變數x與因變數y的關係。最常見問題如醫生治病時的望、聞、問、切,之後判定病人是否生病或生了什麼病, 其中的望、聞、問、切就是獲取的自變數x,即特徵資料,判斷
Java學習系列(二十三)Java面向物件之內部類詳解
一、前言 內部類也稱寄生類,就是把一個類放在類裡面(即內部類的上一級程式單元是類)定義,將其作為外部類的成員。內部類主要用幾種定義形式:靜態(static)內部類,非靜態內部類,匿名內部類(也就是沒有名字的寄生類)。內部類的好處就是內部類可以直接外部類的(包括私有)
機器學習系列(3)_邏輯迴歸應用之Kaggle泰坦尼克之災
1.引言 先說一句,年末雙十一什麼的一來,真是非(mang)常(cheng)歡(gou)樂(le)!然後push自己抽出時間來寫這篇blog的原因也非常簡單: 寫完前兩篇邏輯迴歸的介紹和各個角度理解之後,我們討論群(戳我入群)的小夥伴們紛紛表示『好像很
Docker學習系列3-Influxdb使用入門
1. 簡介:Influxdb是一個開源分散式時序、事件和指標資料庫。使用Go 語言編寫,無需外部依賴。其設計目標是實現分散式和水平伸縮擴充套件。本文主要介紹在Docker環境下Influxdb的使用。InfluxDB有三大特性:1. Time Series (時間序列):你可
小麥子-WPF學習系列3:一個完整的介面案例
這次看一個大點的程式碼,需要有Grid面板知識,視訊裡面有,這裡對程式碼做個解析。 ![先看介面,一個串列埠除錯軟體](https://img-blog.csdn.net/20171128235929942?watermark/2/text/aH
【極客學院】-python學習筆記-3-單執行緒爬蟲 (request安裝遇到問題及解決,應用requests提取資訊)
極客學院課程網址:http://www.jikexueyuan.com/course/821_2.html?ss=1 任務: 爬取極客學院官方網站的課程庫,並儲存 Requests介紹與安裝: HTTP for Humans Python的第三方庫,實現網頁連結,更自動