成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > 用擴(kuò)展方法優(yōu)化多條件查詢(不定條件查詢)

用擴(kuò)展方法優(yōu)化多條件查詢(不定條件查詢)

熱門(mén)標(biāo)簽:使用智能電話機(jī)器人違法嗎 外呼系統(tǒng)用員工身份證 朝陽(yáng)市地圖標(biāo)注 電話機(jī)器人廣告話術(shù) 蘇州銷售外呼系統(tǒng)預(yù)算 淘寶地圖標(biāo)注如何做 太原外呼電銷機(jī)器人費(fèi)用 東莞語(yǔ)音電銷機(jī)器人排名 保山電話外呼管理系統(tǒng)怎么用

在我們開(kāi)發(fā)過(guò)程中,特別是管理系統(tǒng)的開(kāi)發(fā),經(jīng)常會(huì)遇到多條件查詢(或者叫不定條件查詢)的案例,就是提供給User輸入的查詢條件有多個(gè)不同的查詢欄位,而且,在實(shí)際使用中并不能確定User會(huì)使用哪些條件來(lái)當(dāng)做搜索條件。

下圖就是我們實(shí)際項(xiàng)目中一個(gè)查詢頁(yè)面的截圖,
 
User在實(shí)際操作中,有可能會(huì)只根據(jù)[扣帳編號(hào)]查詢,那么,只要在[扣帳編號(hào)]欄位輸入號(hào)碼,其他欄位留空即可,那么查詢語(yǔ)句就只卡[扣帳編號(hào)]這條條件也有可能直接根據(jù)日前范圍查詢,只要輸入起始日期即可。當(dāng)然,在實(shí)際開(kāi)發(fā)的時(shí)候我們是不能預(yù)判User的行為的,因此,正常情況下我們都是用Sql拼接的方法來(lái)應(yīng)對(duì)這個(gè)問(wèn)題:

復(fù)制代碼 代碼如下:

StringBulider sbSql=new StringBulider();
sbSql.Append("select * from V_view1 where 1=1 ");
/*"注意,這里為了確保拼接Sql語(yǔ)句的語(yǔ)法正確,要加上“1=1”,因?yàn)榭赡芎竺嫠械牟樵儣l件都為空,這個(gè)語(yǔ)句 要以 "where 1=1" 結(jié)尾。 以前也有在園子里看到文章說(shuō)加上“1=1”對(duì)查詢效率有一定影響,這個(gè)沒(méi)有深入研究過(guò),對(duì)此持保留態(tài)度鑒于我們這里只針對(duì)一般開(kāi)發(fā),數(shù)據(jù)量不是很大,所以對(duì)于這個(gè)問(wèn)題暫且不做討論*/
if(!string.IsNullorEmpty(varGRNO))
sbSql.AppendFormat(" and BOLNR = '{0}' ",varGRNO);

這樣,就在生成Sql語(yǔ)句之前對(duì)User的輸入行為做了判斷:對(duì)于某個(gè)查詢條件,如果User有輸入,則加入Sql的Where條件中,有個(gè)沒(méi)有輸入,則不予考慮。
對(duì)于日期范圍的判斷,可以這樣寫(xiě):
復(fù)制代碼 代碼如下:

StringBulider sbSql=new StringBulider();
sbSql.Append("select * from V_view1 where 1=1 ");
if(!string.IsNullorEmpty(varGRNO))
sbSql.AppendFormat(" and BOLNR = '{0}' ",varGRNO);

if(!string.IsNullorEmpty(vardtFrom))
{
sbSql.AppendFormat(" and CRDate >= '{0}' ",Convert.ToDateTime(vardtFrom));
if(!string.IsNullorEmpty(vardtTo))
{
sbSql.AppendFormat(" and CRDate lt= '{0}' ",Convert.ToDateTime(vardtTo));
}
}

下面是我們實(shí)際開(kāi)發(fā)中的完整代碼(省略了一些無(wú)關(guān)的邏輯):
復(fù)制代碼 代碼如下:

public DataTable GetGRCollections(string varShipto, string varGRNO, string varGRNOto, string varMaterialNO, string varPL, string varPLto, string varCustomerID, string varCustomerID1, string varCustomerPN, string varDateFrom, string varDateTo, string varChecked,string varSupplierPN)
{
try
{
#region Code Here................

DataTable dtResult = new DataTable();

StringBuilder sbSql = new StringBuilder();
sbSql.Append(" SELECT * ")
.Append(" FROM V_QueryGR")
.Append(" WHERE (GRTime>= '" + varDateFrom + " 'and GRTime='" + varDateTo + "')");
if (!string.IsNullOrEmpty(varShipto))
{
sbSql.Append(" and Plant='"+varShipto+"'");
}

if (!string.IsNullOrEmpty(varGRNO))
{
if (!string.IsNullOrEmpty(varGRNOto))
sbSql.Append(" and (GRNO>='" + varGRNO +"' and GRNO='"+varGRNOto+ "')");
else
sbSql.Append(" and GRNO='" + varGRNO + "'");
}
if (!string.IsNullOrEmpty(varMaterialNO))
{
sbSql.Append(" and MaterialNO='"+varMaterialNO+"'");
}

if (!string.IsNullOrEmpty(varPL))
{
if (!string.IsNullOrEmpty(varPLto))
sbSql.Append(" and (PackingNO>='" + varPL + "' and PackingNO='"+varPLto+"')");
else
sbSql.Append(" and PackingNO='" + varPL + "'");
}
if (!string.IsNullOrEmpty(varCustomerID))
{
sbSql.Append(" and CustomID='" + varCustomerID + "'");
}
if (string.IsNullOrEmpty(varCustomerID))
{
ClsCommon ObjCommon = new ClsCommon(userData);
sbSql.Append(" and CustomID in (" + ObjCommon.GetVendorPermissionString() + ")");
}
if (!string.IsNullOrEmpty(varCustomerID1))
{
sbSql.Append(" and CustomID2='" + varCustomerID1 + "'");
}
if (!string.IsNullOrEmpty(varCustomerPN))
{
sbSql.Append(" and CustomerPN='" + varCustomerPN + "'");
}
if (!string.IsNullOrEmpty(varDateFrom))
{
if (!string.IsNullOrEmpty(varDateTo))
sbSql.Append(" and (GRTime>= '" + varDateFrom + "' and GRTime='" + varDateTo + "')");
else
sbSql.Append(" and PackingNO='" + varDateFrom + "'");
}
if (varChecked == "Checked")
{
sbSql.Append(" and CheckPrice=1 ");
}
if (varChecked == "UnChecked")
{
sbSql.Append(" and CheckPrice=0");
}
if (!string.IsNullOrEmpty(varSupplierPN))
{
sbSql.Append(" and SuplierPN='" + varSupplierPN + "'");
}

try
{
ControlHandleDB();
dtResult = ControlSqlAccess.GetDataTable(sbSql.ToString());
}
catch
{
throw;
}
finally
{
ControlSqlAccess.CloseConnection();
}

return dtResult;

#endregion
}
catch (CommonObjectsException ex)
{

}
catch (Exception ex)
{

}
}

這樣一來(lái),如果參數(shù)多一點(diǎn)的話,一個(gè)簡(jiǎn)單的Get方法就要寫(xiě)50行以上的代碼,雖然不能以代碼的行數(shù)來(lái)評(píng)定開(kāi)發(fā)效率,但這種方法無(wú)疑增加了代碼量,
也降低的代碼的可讀性和可維護(hù)性。
以前,為了給這種情況找到一種更“優(yōu)雅”,更簡(jiǎn)潔的方法,也有在網(wǎng)上找了一些資料,發(fā)現(xiàn)其他人的方法也是大同小異,差不多都是這樣按條件拼接。
園子里有一位同學(xué)(現(xiàn)在忘記是哪位了O(∩_∩)O哈!)提出了一種解決方案就是把判斷的邏輯直接寫(xiě)到Sql語(yǔ)句或者存儲(chǔ)過(guò)程中:
復(fù)制代碼 代碼如下:

select * from V_view1 where ((ISNULL(@varGRNO,'')>'' and BOLNR=@varGRNO ) or (1=1))

這個(gè)方法雖然一定程度上減少了代碼量,但是把業(yè)務(wù)邏輯混雜在Sql語(yǔ)句中,個(gè)人感覺(jué)不是太好的方法,而且大大增加了維護(hù)的難度。當(dāng)然,有興趣的同學(xué)可以
自己去研究。
既然,以上方法都有弊端,那么有沒(méi)有更好一點(diǎn)的解放方案呢?答案是肯定的,上次用EF的時(shí)候突然想到.Net中的擴(kuò)展方法能夠?qū)@個(gè)問(wèn)題進(jìn)行優(yōu)化。
首先,來(lái)看一下什么事擴(kuò)展方法,一下是來(lái)做MSDN的解釋:
擴(kuò)展方法使您能夠向現(xiàn)有類型“添加”方法,而無(wú)需創(chuàng)建新的派生類型、重新編譯或以其他方式修改原始類型。 擴(kuò)展方法是一種特殊的靜態(tài)方法,但可以像擴(kuò)展類型上的實(shí)例方法一樣進(jìn)行調(diào)用。
我們常用的Linq中引用的 using System.Linq 其實(shí)就是一個(gè)擴(kuò)展方法庫(kù),更詳細(xì)的內(nèi)容可以參照MSDN和c# 擴(kuò)展方法奇思妙用(鶴沖天)。在這里,我只舉一個(gè)簡(jiǎn)單的例子:
比如,正常情況下判斷一個(gè)字符串是否為空是這樣寫(xiě):
復(fù)制代碼 代碼如下:

string.IsNullOrEmpty(str);
如果加上一個(gè)我們自己擴(kuò)展的方法:
/// summary>
/// 檢查字符串是否是空(IsNullOrEmpty)
/// /summary>
/// param name="str">/param>
/// returns>/returns>
public static bool IsNullOrEmpty(this string str)
{
return string.IsNullOrEmpty(str);
}

那么以后判斷字符串是否為空就可以這樣:
復(fù)制代碼 代碼如下:

str.IsNullOrEmpty();

是不是簡(jiǎn)潔、優(yōu)雅了許多呢?
好,回到正題,看看如何用擴(kuò)展方法的特性來(lái)優(yōu)化Sql語(yǔ)句的拼接問(wèn)題。既然擴(kuò)展方法允許我們以實(shí)例方法的方式來(lái)調(diào)用靜態(tài)方法,那么我們是否可以給Sql語(yǔ)句的字符串實(shí)例擴(kuò)展一個(gè)方法來(lái)對(duì)其操作呢?
比如這個(gè)Sql:
復(fù)制代碼 代碼如下:

StringBulider sbSql=new StringBulider();
sbSql.Append("select * from V_view1 where 1=1 ");
if(!string.IsNullorEmpty(varGRNO))
sbSql.AppendFormat(" and BOLNR = '{0}' ",varGRNO);

實(shí)際上就是對(duì)一個(gè)變量進(jìn)行判斷,然后操作字符串實(shí)例。
那么,我們就加行一個(gè)這樣的擴(kuò)展:
復(fù)制代碼 代碼如下:

public static string strEquals(this string strSql, string strValue, string ColName)
{
if (!string.IsNullOrEmpty(strValue))
return string.Format(strSql + " and {0}='{1}' ", ColName, strValue);
else
return strSql;
}

看到?jīng)]有,在方法內(nèi)部進(jìn)行參數(shù)的非空判斷,那么,上面的代碼就可以這樣寫(xiě):
復(fù)制代碼 代碼如下:

String strSql="select * from V_view1 where 1=1"
strSql=strSql.strEquals(varGRNO,BOLNR)

是不是少了很多代碼?
如果有更多的參數(shù),我們可以寫(xiě)的想Linq一樣優(yōu)雅:
復(fù)制代碼 代碼如下:

String strSql="select * from V_view1 where 1=1"
.strEquals(varGRNO,BOLNR)
.strEquals(varPLNO,VBELN)
.strEquals(varPONO,EBELN)

對(duì)于like語(yǔ)句,進(jìn)行下面的擴(kuò)展
復(fù)制代碼 代碼如下:

public static string strLike(this string strSql, string strValue, string ColName)
{
if (!string.IsNullOrEmpty(strValue))
return string.Format(strSql + " and {0} like '%{1}%' ", ColName, strValue);
else
return strSql;
}


和范圍的擴(kuò)展:
復(fù)制代碼 代碼如下:

public static string strEqualsOrBetween(this string strSql, string strStart, string strEnd, string ColName)
{
if (string.IsNullOrEmpty(strStart) string.IsNullOrEmpty(strEnd))
return strSql;
else if (!string.IsNullOrEmpty(strStart) !string.IsNullOrEmpty(strEnd))
{
return strSql.strBigger(strStart, ColName).strSmaller(strEnd, ColName);
}
else if (string.IsNullOrEmpty(strStart) !string.IsNullOrEmpty(strEnd))
return strSql.strEquals(strEnd, ColName);
else
return strSql.strEquals(strStart, ColName);
}

這樣一來(lái),上面一大段的代碼就可以寫(xiě)成這樣:
復(fù)制代碼 代碼如下:

public DataTable GetGRCollections(string varShipto, string varGRNO, string varGRNOto, string varMaterialNO, string varPL, string varPLto, string varCustomerID, string varCustomerID1, string varCustomerPN, string varDateFrom, string varDateTo, string varChecked,string varSupplierPN)
{
try
{
#region Code Here................

DataTable dtResult = new DataTable();

String strSql="select * from V_QueryGR where 1=1"
.DtEqualsOrBetween(varDateFrom,varDateTo,GRTime)
.strEquals(varShipto,Plant)
.strEqualsOrBetween(varGRNO,GRNO)
.strEquals(varMaterialNO,MaterialNO)
.strEqualsOrBetween(varPL,PackingNO)
.strEquals(varCustomerID,CustomID)
.strEquals(varCustomerID1,CustomID2)
.strEquals(varCustomerPN,CustomerPN)
.DtEqualsOrBetween(varDateFrom,varDateTo,GRTime)
.strEquals(varSupplierPN,SuplierPN)
try
{
ControlHandleDB();
dtResult = ControlSqlAccess.GetDataTable(sbSql.ToString());
}
catch
{
throw;
}
finally
{
ControlSqlAccess.CloseConnection();
}

return dtResult;

#endregion
}

catch (CommonObjectsException ex)
{

}
catch (Exception ex)
{

}
}


對(duì)于其他的一下擴(kuò)展方法,我寫(xiě)了一個(gè)類文件,有興趣的可以點(diǎn)此下載。
第一次正正經(jīng)經(jīng)的寫(xiě)博文,累死我了。由于自己也是個(gè)菜鳥(niǎo),想把一個(gè)問(wèn)題講清楚讓更多的“菜鳥(niǎo)”也能看懂,難免有些啰嗦,有不足的地方還請(qǐng)大家多多指教。

您可能感興趣的文章:
  • PHP實(shí)現(xiàn)多條件查詢實(shí)例代碼
  • 多條件查詢的程序
  • PHP組合查詢多條件查詢實(shí)例代碼
  • 比較不錯(cuò)的asp單表單字段多條件查詢
  • 一個(gè)簡(jiǎn)單實(shí)現(xiàn)多條件查詢的例子
  • php通過(guò)數(shù)組實(shí)現(xiàn)多條件查詢實(shí)現(xiàn)方法(字符串分割)

標(biāo)簽:潛江 洛陽(yáng) 克拉瑪依 運(yùn)城 阿里 綏化 西藏 呼倫貝爾

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《用擴(kuò)展方法優(yōu)化多條件查詢(不定條件查詢)》,本文關(guān)鍵詞  用,擴(kuò)展,方法,優(yōu)化,多,條件,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《用擴(kuò)展方法優(yōu)化多條件查詢(不定條件查詢)》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于用擴(kuò)展方法優(yōu)化多條件查詢(不定條件查詢)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    好男人看片在线观看免费观看国语| 成人国产一区二区三区| 99久久久免费精品国产一区二区| 日韩片欧美片| 久久久久久久欧美精品| jjzzjjzz欧美69巨大| 亚洲国产精品热久久| 91黄色在线视频| 久久亚洲综合色一区二区三区| 国产丝袜一区| 国产超碰精品在线观看| 午夜亚洲激情| 麻豆精品一区二区三区视频| 久久精品亚洲精品国产欧美| 成人国产在线视频| 五月天激情国产综合婷婷婷| 动漫性做爰视频| 午夜精品在线播放| 1204国产成人精品视频| 国内激情视频在线观看| 国产肉丝袜一区二区| 日韩欧美国产成人| 人人做人人爽人人爱| 麻豆视频成人| av中文字幕在线| 亚洲va欧美va在线观看| 国产精品激情偷乱一区二区∴| av一区二区在线播放| 天天操天天操天天操天天| a在线观看免费视频| 国产视频xxxx| 久久精品国产96久久久香蕉| 国产精品日韩精品在线播放| 毛片久久久久久| 日本熟妇毛茸茸丰满| 被陌生人带去卫生间啪到腿软| 亚洲国产精品嫩草影院久久av| 国产精品入口麻豆完整版| 天堂av中文在线观看| 一区二区三区丝袜| 色婷婷综合网站| 在线播放中文一区| 国产亚洲欧洲| 精品伊人久久97| heisi视频网在线观看| 免费网站免费进入在线| 91久久久久久久久久| 99视频免费| 亚洲天堂av老司机| 久久综合久久综合久久| av片哪里在线观看| 91好吊色国产欧美日韩在线| 性欧美又大又长又硬| 米奇777在线影院线| 欧美一区二区网站| 国产亚洲色婷婷久久99精品| 9999久久久久| 性欧美精品男男| 99久久久成人国产精品| 91精品国产91久久久久久一区二区| 天堂a中文在线| 国产精品麻豆| 国产午夜精品一区二区三区嫩草| 午夜精品一区| 亚洲一区二区中文字幕在线观看| 欧美黑人一区二区三区| 国产精品日韩精品欧美精品| 国产精品扒开腿做爽爽爽视频软件| 欧美久久九九| 国产午夜在线播放| 中文字幕亚洲无线码a| 日韩精品中文字| 一级做a爰片久久| 另类综合日韩欧美亚洲| 日本三级免费观看| 欧美激情一级二级三级在线视频| 91午夜伦伦电影理论片| 影院欧美亚洲| 亚洲欧美中文另类| 中文字幕第24页| 一区二区三区韩国免费中文网站| 毛片av中文字幕一区二区| 四虎成人免费影院| 亚洲校园欧美国产另类| 国产精品无码永久免费888| 欧美巨乳在线| 亚洲欧洲成人| 欧美一级淫片aaaaaaa视频| 欧美老女人在线视频| 男人的天堂av高清在线| 精品国产一区二区在线观看| 亚洲三级在线看| 奇米777四色影视在线看| 亚洲福利视频二区| 日本在线中文字幕一区二区三区| 最新黄色片网站| www.成人网.com| 日韩一区二区精品| 久久久久久久久97黄色工厂| 成人xvideos免费视频| 亚洲黄色免费电影| 一级毛片aaaaaa免费看| 亚洲资源av| 一区二区三区欧洲区| 久热国产精品视频一区二区三区| 岛国在线视频| 国产精品影视网| 狠狠色噜噜狠狠狠888奇米| 四虎最新网站| 色狠狠一区二区三区| 国产精品天天干| 国产电影一区二区在线观看| 免费无码av片在线观看| 在线看黄网址| 熟妇人妻av无码一区二区三区| 免费在线观看污污视频| 亚洲国产高清视频| 国产一区二区三区欧美| 国产亚洲精品精品精品| 91国产精品视频在线观看| 中文字幕一区二区人妻痴汉电车| 99鲁鲁精品一区二区三区| 精品免费av在线| 男男做爰猛烈叫床爽爽小说| 91青青国产在线观看精品| 99久久久无码国产精品6| 欧美在线一级va免费观看| 91九色国产视频| 2023av视频| 欧美黄色网络| 精品人妻一区二区三区四区在线| 在线成人高清不卡| av在线导航| 涩涩在线视频| 比比资源先锋影音网| 在线免费日韩av| 欧美成人一区二区三区在线观看| 91超碰碰碰碰久久久久久综合| 亚洲999一在线观看www| av中文字幕在线观看第一页| 成人影视免费观看| 国产精品一区二区在线观看网站| 欧美图片第一页| 亚洲黄色网址在线观看| 欧美精品免费在线| 男女污污视频在线观看| 国产又大又黄又粗| 国产高清精品一区| 涩涩网站在线观看| 韩国精品视频在线观看| 亚洲欧美中文日韩在线| 亚洲天堂一区在线| 一区二区三区四区五区在线| 国产色婷婷国产综合在线理论片a| av首页在线观看| 福利网站在线观看| 日本激情视频在线观看| 久久精品久久久久久久| 少妇av一区二区三区| 1234区在线观看视频免费| 亚洲图片欧美日韩| 永久免费网站视频在线观看| 欧美丝袜足交| www.一区二区.com| 亚洲中文字幕在线一区| 欧美日韩亚洲综合| 灌醉mj刚成年的大学平面模特| 九色蝌蚪av新入口| 欧洲亚洲免费在线| 秋霞影院一区二区三区| 亚洲视屏在线观看| 性欧美精品高清| 亚洲免费观看高清完整版在线观看| 四虎国产精品永久在线国在线| 国产鲁鲁视频在线观看免费| 免费不卡在线观看| 久久99精品国产麻豆不卡| 成人欧美一区二区三区黑人麻豆| 巨乳诱惑日韩免费av| 91久久精品国产91久久性色tv| 精品成人免费自拍视频| 欧美日韩一区二区在线免费观看| 欧美色图影院| 国产精品久久av| 青青草国产精品97视觉盛宴| 97人妻人人揉人人躁人人| 欧洲精品一区二区三区久久| 午夜影视一区二区三区| 国产日韩一区在线| 日韩成人伦理电影在线观看| 国内自拍视频在线播放| 久久免费美女视频| 99热最新网址| 国产美女被草| 99热在线只有精品| 亚洲精品国产精品乱码| 国产美女永久免费无遮挡| 久久精品视频中文字幕| 日本激情免费| 亚洲一二在线观看| 369你懂的电影天堂| jizzjizz大全| 国产又粗又猛又爽又黄的网站| 最新中文字幕av专区| 欧美成人综合网站| 日本不卡免费高清视频在线| 欧美一区二区色| 一级黄色片免费| 黄色短视频在线观看| 欧美精品一区二区三区久久久| 中文字幕精品久久| 国产精品理人伦一区二区三区| 国产乱叫456| 欧美性大战久久久| 国产成人无吗| 亚洲美女在线视频| 中文乱码免费一区二区| 跑男十一季在线观看免费| 国产蜜臀在线| 国产欧美一区二区精品性色超碰| 成人av地址| 国产精品视频白浆合集| 天天干天天操天天操| 91av在线视频观看| 色综合久久88色综合天天| 亚洲电影一区二区| 日韩成人高清视频| 91国内免费在线视频| 夜夜嗨av一区二区三区网站四季av| 国产乱码久久久久| 亚洲欧洲无码一区二区三区| 日韩专区在线| 国产97在线|亚洲| 日韩精品在线观看一区二区| 污版视频在线观看| 欧美一级视频在线观看| 欧美日韩成人在线视频| 黄色成人在线网站| 日韩大片免费观看视频播放| 国内外成人在线| 国产成人啪精品视频免费网| 欧美婷婷久久五月精品三区| 日韩精品一区二区三区四区五区| 久久精品九九| 成全视频在线播放大地| 欧美日韩亚洲一区二区三区在线| 国产又猛又黄的视频| 亚洲成人精品在线| 人人妻人人澡人人爽久久av| 91精品国产自产拍在线观看蜜| 加勒比视频一区| 亚洲最大福利网站| 日韩成人在线视频观看| 久久精品91久久香蕉加勒比| 欧美成人精品在线观看| 免费一级黄色录像| 欧美xxxx在线| 国产女人18毛片水真多| 水蜜桃一区二区三区| 欧美动物xxx| 熟妇人妻av无码一区二区三区| 日韩中文字幕在线播放| 免费在线观看成人av| 欧洲亚洲免费视频| 国产99久久精品一区二区永久免费| 97人澡人人添人人爽欧美| 久久精品二区| 婷婷开心激情网| 在线看片日韩| 精品一区二区三区影院在线午夜| 麻豆一区二区99久久久久| 久久天堂精品| 91视频在线免费| 欧美日韩国产免费观看视频| 国产在线视频网站| 69av视频在线播放| 亚洲精品国产精品国自产网站| 亚洲国产精品久久久| 色偷偷777| 国产午夜精品福利视频| 国产成人3p视频免费观看| 美女又爽又黄免费动漫| 天天做天天干天天操| 天天操天天摸天天爽| 在线观看老湿视频福利| www.久久久久久| 一区二区三区观看| 午夜久久福利视频| 久久久久久18| xxxxxx欧美| 亚洲va久久久噜噜噜久久狠狠| 欧美劲爆第一页| 91蜜桃在线视频| 欧美日韩女优| 国产精品色在线网站| h视频在线免费观看| 小黄文在线观看| 五月开心婷婷久久| 97超级在线观看免费高清完整版电视剧| 亚洲国产精品免费视频| 18岁以下禁止观看的美女视频| 亚洲欧美专区| 久久精品免费在线| 五月花成人网| 国产aⅴ精品一区二区三区黄| 欧美亚洲精品日韩| 中国色在线观看另类| 国产一区二区在线观看免费播放| 国产欧美久久一区二区三区| 国产麻豆综合视频在线观看| 免费在线观看污网站| www亚洲视频| av女优在线播放| 337人体粉嫩噜噜噜| 思思99热久久精品在线6| 9.1成人看片| 在线免费观看av网址| 亚洲污视频在线观看| 日本久久精品视频| 日韩在线观看免费高清| 四虎地址8848jia| 中文字幕日韩一区二区三区不卡| 中文字幕精品一区日韩| 欧美精品国产一区| 久久久久久久波多野高潮日日| 亚洲综合中文字幕在线| 国产精国产精品| 2019中文字幕在线|