亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

asp.net DataTable相關操作集錦(篩選,取前N條數據,去重復行,獲取指定列數據等)

2024-07-10 13:30:39
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了asp.net DataTable相關操作,包括篩選,取前N條數據,去重復行,獲取指定列數據等.基本涵蓋了DataTable的常見操作技巧,需要的朋友可以參考下
 

本文實例總結了asp.net DataTable相關操作。分享給大家供大家參考,具體如下:

#region DataTable篩選,排序返回符合條件行組成的新DataTable或直接用DefaultView按條件返回/// <summary>/// DataTable篩選,排序返回符合條件行組成的新DataTable或直接用DefaultView按條件返回/// eg:SortExprDataTable(dt,"Sex='男'","Time Desc",1)/// </summary>/// <param name="dt">傳入的DataTable</param>/// <param name="strExpr">篩選條件</param>/// <param name="strSort">排序條件</param>/// <param name="mode">1,直接用DefaultView按條件返回,效率較高;2,DataTable篩選,排序返回符合條件行組成的新DataTable</param>public static DataTable SortDataTable(DataTable dt, string strExpr, string strSort, int mode){  switch (mode)  {    case 1:      //方法一 直接用DefaultView按條件返回      dt.DefaultView.RowFilter = strExpr;      dt.DefaultView.Sort = strSort;      return dt;    case 2:      //方法二 DataTable篩選,排序返回符合條件行組成的新DataTable      DataTable dt1 = new DataTable();      DataRow[] GetRows = dt.Select(strExpr, strSort);      //復制DataTable dt結構不包含數據      dt1 = dt.Clone();      foreach (DataRow row in GetRows)      {        dt1.Rows.Add(row.ItemArray);      }      return dt1;    default:      return dt;  }}#endregion
#region 獲取DataTable前幾條數據/// <summary>/// 獲取DataTable前幾條數據/// </summary>/// <param name="TopItem">前N條數據</param>/// <param name="oDT">源DataTable</param>/// <returns></returns>public static DataTable DtSelectTop(int TopItem, DataTable oDT){  if (oDT.Rows.Count < TopItem) return oDT;  DataTable NewTable = oDT.Clone();  DataRow[] rows = oDT.Select("1=1");  for (int i = 0; i < TopItem; i++)  {    NewTable.ImportRow((DataRow)rows[i]);  }  return NewTable;}#endregion
#region 獲取DataTable中指定列的數據/// <summary>/// 獲取DataTable中指定列的數據/// </summary>/// <param name="dt">數據源</param>/// <param name="tableName">新的DataTable的名詞</param>/// <param name="strColumns">指定的列名集合</param>/// <returns>返回新的DataTable</returns>public static DataTable GetTableColumn(DataTable dt, string tableName, params string[] strColumns){  DataTable dtn = new DataTable();  if (dt == null)  {    throw new ArgumentNullException("參數dt不能為null");  }  try  {    dtn = dt.DefaultView.ToTable(tableName, true, strColumns);  }  catch (Exception e)  {    throw new Exception(e.Message);  }  return dtn;}#endregion
using System;using System.Collections.Generic;using System.Linq;using System.Data;using System.Collections;using System.Text;namespace GuanEasy{ /// <summary>  /// DataSet助手  /// </summary>  public class DataSetHelper  {    private class FieldInfo    {      public string RelationName;      public string FieldName;      public string FieldAlias;      public string Aggregate;    }    private DataSet ds;    private ArrayList m_FieldInfo;    private string m_FieldList;    private ArrayList GroupByFieldInfo;    private string GroupByFieldList;    public DataSet DataSet    {      get { return ds; }    }    #region Construction    public DataSetHelper()    {      ds = null;    }    public DataSetHelper(ref DataSet dataSet)    {      ds = dataSet;    }    #endregion    #region Private Methods    private bool ColumnEqual(object objectA, object objectB)    {      if ( objectA == DBNull.Value && objectB == DBNull.Value )      {        return true;      }      if ( objectA == DBNull.Value || objectB == DBNull.Value )      {        return false;      }      return ( objectA.Equals( objectB ) );    }    private bool RowEqual(DataRow rowA, DataRow rowB, DataColumnCollection columns)    {      bool result = true;      for ( int i = 0; i < columns.Count; i++ )      {        result &= ColumnEqual( rowA[ columns[ i ].ColumnName ], rowB[ columns[ i ].ColumnName ] );      }      return result;    }    private void ParseFieldList(string fieldList, bool allowRelation)    {      if ( m_FieldList == fieldList )      {        return;      }      m_FieldInfo = new ArrayList();      m_FieldList = fieldList;      FieldInfo Field;      string[] FieldParts;      string[] Fields = fieldList.Split( ',' );      for ( int i = 0; i <= Fields.Length - 1; i++ )      {        Field = new FieldInfo();        FieldParts = Fields[ i ].Trim().Split( ' ' );        switch ( FieldParts.Length )        {          case 1:            //to be set at the end of the loop            break;          case 2:            Field.FieldAlias = FieldParts[ 1 ];            break;          default:            return;        }        FieldParts = FieldParts[ 0 ].Split( '.' );        switch ( FieldParts.Length )        {          case 1:            Field.FieldName = FieldParts[ 0 ];            break;          case 2:            if ( allowRelation == false )            {              return;            }            Field.RelationName = FieldParts[ 0 ].Trim();            Field.FieldName = FieldParts[ 1 ].Trim();            break;          default:            return;        }        if ( Field.FieldAlias == null )        {          Field.FieldAlias = Field.FieldName;        }        m_FieldInfo.Add( Field );      }    }    private DataTable CreateTable(string tableName, DataTable sourceTable, string fieldList)    {      DataTable dt;      if ( fieldList.Trim() == "" )      {        dt = sourceTable.Clone();        dt.TableName = tableName;      }      else      {        dt = new DataTable( tableName );        ParseFieldList( fieldList, false );        DataColumn dc;        foreach ( FieldInfo Field in m_FieldInfo )        {          dc = sourceTable.Columns[ Field.FieldName ];          DataColumn column = new DataColumn();          column.ColumnName = Field.FieldAlias;          column.DataType = dc.DataType;          column.MaxLength = dc.MaxLength;          column.Expression = dc.Expression;          dt.Columns.Add( column );        }      }      if ( ds != null )      {        ds.Tables.Add( dt );      }      return dt;    }    private void InsertInto(DataTable destTable, DataTable sourceTable,                string fieldList, string rowFilter, string sort)    {      ParseFieldList( fieldList, false );      DataRow[] rows = sourceTable.Select( rowFilter, sort );      DataRow destRow;      foreach ( DataRow sourceRow in rows )      {        destRow = destTable.NewRow();        if ( fieldList == "" )        {          foreach ( DataColumn dc in destRow.Table.Columns )          {            if ( dc.Expression == "" )            {              destRow[ dc ] = sourceRow[ dc.ColumnName ];            }          }        }        else        {          foreach ( FieldInfo field in m_FieldInfo )          {            destRow[ field.FieldAlias ] = sourceRow[ field.FieldName ];          }        }        destTable.Rows.Add( destRow );      }    }    private void ParseGroupByFieldList(string FieldList)    {      if ( GroupByFieldList == FieldList )      {        return;      }      GroupByFieldInfo = new ArrayList();      FieldInfo Field;      string[] FieldParts;      string[] Fields = FieldList.Split( ',' );      for ( int i = 0; i <= Fields.Length - 1; i++ )      {        Field = new FieldInfo();        FieldParts = Fields[ i ].Trim().Split( ' ' );        switch ( FieldParts.Length )        {          case 1:            //to be set at the end of the loop            break;          case 2:            Field.FieldAlias = FieldParts[ 1 ];            break;          default:            return;        }        FieldParts = FieldParts[ 0 ].Split( '(' );        switch ( FieldParts.Length )        {          case 1:            Field.FieldName = FieldParts[ 0 ];            break;          case 2:            Field.Aggregate = FieldParts[ 0 ].Trim().ToLower();            Field.FieldName = FieldParts[ 1 ].Trim( ' ', ')' );            break;          default:            return;        }        if ( Field.FieldAlias == null )        {          if ( Field.Aggregate == null )          {            Field.FieldAlias = Field.FieldName;          }          else          {            Field.FieldAlias = Field.Aggregate + "of" + Field.FieldName;          }        }        GroupByFieldInfo.Add( Field );      }      GroupByFieldList = FieldList;    }    private DataTable CreateGroupByTable(string tableName, DataTable sourceTable, string fieldList)    {      if ( fieldList == null || fieldList.Length == 0 )      {        return sourceTable.Clone();      }      else      {        DataTable dt = new DataTable( tableName );        ParseGroupByFieldList( fieldList );        foreach ( FieldInfo Field in GroupByFieldInfo )        {          DataColumn dc = sourceTable.Columns[ Field.FieldName ];          if ( Field.Aggregate == null )          {            dt.Columns.Add( Field.FieldAlias, dc.DataType, dc.Expression );          }          else          {            dt.Columns.Add( Field.FieldAlias, dc.DataType );          }        }        if ( ds != null )        {          ds.Tables.Add( dt );        }        return dt;      }    }    private void InsertGroupByInto(DataTable destTable, DataTable sourceTable, string fieldList,                    string rowFilter, string groupBy)    {      if ( fieldList == null || fieldList.Length == 0 )      {        return;      }      ParseGroupByFieldList( fieldList );      ParseFieldList( groupBy, false );      DataRow[] rows = sourceTable.Select( rowFilter, groupBy );      DataRow lastSourceRow = null, destRow = null;      bool sameRow;      int rowCount = 0;      foreach ( DataRow sourceRow in rows )      {        sameRow = false;        if ( lastSourceRow != null )        {          sameRow = true;          foreach ( FieldInfo Field in m_FieldInfo )          {            if ( !ColumnEqual( lastSourceRow[ Field.FieldName ], sourceRow[ Field.FieldName ] ) )            {              sameRow = false;              break;            }          }          if ( !sameRow )          {            destTable.Rows.Add( destRow );          }        }        if ( !sameRow )        {          destRow = destTable.NewRow();          rowCount = 0;        }        rowCount += 1;        foreach ( FieldInfo field in GroupByFieldInfo )        {          switch ( field.Aggregate.ToLower() )          {            case null:            case "":            case "last":              destRow[ field.FieldAlias ] = sourceRow[ field.FieldName ];              break;            case "first":              if ( rowCount == 1 )              {                destRow[ field.FieldAlias ] = sourceRow[ field.FieldName ];              }              break;            case "count":              destRow[ field.FieldAlias ] = rowCount;              break;            case "sum":              destRow[ field.FieldAlias ] = Add( destRow[ field.FieldAlias ], sourceRow[ field.FieldName ] );              break;            case "max":              destRow[ field.FieldAlias ] = Max( destRow[ field.FieldAlias ], sourceRow[ field.FieldName ] );              break;            case "min":              if ( rowCount == 1 )              {                destRow[ field.FieldAlias ] = sourceRow[ field.FieldName ];              }              else              {                destRow[ field.FieldAlias ] = Min( destRow[ field.FieldAlias ], sourceRow[ field.FieldName ] );              }              break;          }        }        lastSourceRow = sourceRow;      }      if ( destRow != null )      {        destTable.Rows.Add( destRow );      }    }    private object Min(object a, object b)    {      if ( ( a is DBNull ) || ( b is DBNull ) )      {        return DBNull.Value;      }      if ( ( (IComparable) a ).CompareTo( b ) == -1 )      {        return a;      }      else      {        return b;      }    }    private object Max(object a, object b)    {      if ( a is DBNull )      {        return b;      }      if ( b is DBNull )      {        return a;      }      if ( ( (IComparable) a ).CompareTo( b ) == 1 )      {        return a;      }      else      {        return b;      }    }    private object Add(object a, object b)    {      if ( a is DBNull )      {        return b;      }      if ( b is DBNull )      {        return a;      }      return ( (decimal) a + (decimal) b );    }    private DataTable CreateJoinTable(string tableName, DataTable sourceTable, string fieldList)    {      if ( fieldList == null )      {        return sourceTable.Clone();      }      else      {        DataTable dt = new DataTable( tableName );        ParseFieldList( fieldList, true );        foreach ( FieldInfo field in m_FieldInfo )        {          if ( field.RelationName == null )          {            DataColumn dc = sourceTable.Columns[ field.FieldName ];            dt.Columns.Add( dc.ColumnName, dc.DataType, dc.Expression );          }          else          {            DataColumn dc = sourceTable.ParentRelations[ field.RelationName ].ParentTable.Columns[ field.FieldName ];            dt.Columns.Add( dc.ColumnName, dc.DataType, dc.Expression );          }        }        if ( ds != null )        {          ds.Tables.Add( dt );        }        return dt;      }    }    private void InsertJoinInto(DataTable destTable, DataTable sourceTable,                  string fieldList, string rowFilter, string sort)    {      if ( fieldList == null )      {        return;      }      else      {        ParseFieldList( fieldList, true );        DataRow[] Rows = sourceTable.Select( rowFilter, sort );        foreach ( DataRow SourceRow in Rows )        {          DataRow DestRow = destTable.NewRow();          foreach ( FieldInfo Field in m_FieldInfo )          {            if ( Field.RelationName == null )            {              DestRow[ Field.FieldName ] = SourceRow[ Field.FieldName ];            }            else            {              DataRow ParentRow = SourceRow.GetParentRow( Field.RelationName );              DestRow[ Field.FieldName ] = ParentRow[ Field.FieldName ];            }          }          destTable.Rows.Add( DestRow );        }      }    }    #endregion    #region SelectDistinct / Distinct    /// <summary>    /// 按照fieldName從sourceTable中選擇出不重復的行,    /// 相當于select distinct fieldName from sourceTable    /// </summary>    /// <param name="tableName">表名</param>    /// <param name="sourceTable">源DataTable</param>    /// <param name="fieldName">列名</param>    /// <returns>一個新的不含重復行的DataTable,列只包括fieldName指明的列</returns>    public DataTable SelectDistinct(string tableName, DataTable sourceTable, string fieldName)    {      DataTable dt = new DataTable( tableName );      dt.Columns.Add( fieldName, sourceTable.Columns[ fieldName ].DataType );      object lastValue = null;      foreach ( DataRow dr in sourceTable.Select( "", fieldName ) )      {        if ( lastValue == null || !( ColumnEqual( lastValue, dr[ fieldName ] ) ) )        {          lastValue = dr[ fieldName ];          dt.Rows.Add( new object[]{lastValue} );        }      }      if ( ds != null && !ds.Tables.Contains( tableName ) )      {        ds.Tables.Add( dt );      }      return dt;    }    /// <summary>    /// 按照fieldName從sourceTable中選擇出不重復的行,    /// 相當于select distinct fieldName1,fieldName2,,fieldNamen from sourceTable    /// </summary>    /// <param name="tableName">表名</param>    /// <param name="sourceTable">源DataTable</param>    /// <param name="fieldNames">列名數組</param>    /// <returns>一個新的不含重復行的DataTable,列只包括fieldNames中指明的列</returns>    public DataTable SelectDistinct(string tableName, DataTable sourceTable, string[] fieldNames)    {      DataTable dt = new DataTable( tableName );      object[] values = new object[fieldNames.Length];      string fields = "";      for ( int i = 0; i < fieldNames.Length; i++ )      {        dt.Columns.Add( fieldNames[ i ], sourceTable.Columns[ fieldNames[ i ] ].DataType );        fields += fieldNames[ i ] + ",";      }      fields = fields.Remove( fields.Length - 1, 1 );      DataRow lastRow = null;      foreach ( DataRow dr in sourceTable.Select( "", fields ) )      {        if ( lastRow == null || !( RowEqual( lastRow, dr, dt.Columns ) ) )        {          lastRow = dr;          for ( int i = 0; i < fieldNames.Length; i++ )          {            values[ i ] = dr[ fieldNames[ i ] ];          }          dt.Rows.Add( values );        }      }      if ( ds != null && !ds.Tables.Contains( tableName ) )      {        ds.Tables.Add( dt );      }      return dt;    }    /// <summary>    /// 按照fieldName從sourceTable中選擇出不重復的行,    /// 并且包含sourceTable中所有的列。    /// </summary>    /// <param name="tableName">表名</param>    /// <param name="sourceTable">源表</param>    /// <param name="fieldName">字段</param>    /// <returns>一個新的不含重復行的DataTable</returns>    public DataTable Distinct(string tableName, DataTable sourceTable, string fieldName)    {      DataTable dt = sourceTable.Clone();      dt.TableName = tableName;      object lastValue = null;      foreach ( DataRow dr in sourceTable.Select( "", fieldName ) )      {        if ( lastValue == null || !( ColumnEqual( lastValue, dr[ fieldName ] ) ) )        {          lastValue = dr[ fieldName ];          dt.Rows.Add( dr.ItemArray );        }      }      if ( ds != null && !ds.Tables.Contains( tableName ) )      {        ds.Tables.Add( dt );      }      return dt;    }    /// <summary>    /// 按照fieldNames從sourceTable中選擇出不重復的行,    /// 并且包含sourceTable中所有的列。    /// </summary>    /// <param name="tableName">表名</param>    /// <param name="sourceTable">源表</param>    /// <param name="fieldNames">字段</param>    /// <returns>一個新的不含重復行的DataTable</returns>    public DataTable Distinct(string tableName, DataTable sourceTable, string[] fieldNames)    {      DataTable dt = sourceTable.Clone();      dt.TableName = tableName;      string fields = "";      for ( int i = 0; i < fieldNames.Length; i++ )      {        fields += fieldNames[ i ] + ",";      }      fields = fields.Remove( fields.Length - 1, 1 );      DataRow lastRow = null;      foreach ( DataRow dr in sourceTable.Select( "", fields ) )      {        if ( lastRow == null || !( RowEqual( lastRow, dr, dt.Columns ) ) )        {          lastRow = dr;          dt.Rows.Add( dr.ItemArray );        }      }      if ( ds != null && !ds.Tables.Contains( tableName ) )      {        ds.Tables.Add( dt );      }      return dt;    }    #endregion    #region Select Table Into    /// <summary>    /// 按sort排序,按rowFilter過濾sourceTable,    /// 復制fieldList中指明的字段的數據到新DataTable,并返回之    /// </summary>    /// <param name="tableName">表名</param>    /// <param name="sourceTable">源表</param>    /// <param name="fieldList">字段列表</param>    /// <param name="rowFilter">過濾條件</param>    /// <param name="sort">排序</param>    /// <returns>新DataTable</returns>    public DataTable SelectInto(string tableName, DataTable sourceTable,                  string fieldList, string rowFilter, string sort)    {      DataTable dt = CreateTable( tableName, sourceTable, fieldList );      InsertInto( dt, sourceTable, fieldList, rowFilter, sort );      return dt;    }    #endregion    #region Group By Table    public DataTable SelectGroupByInto(string tableName, DataTable sourceTable, string fieldList,                      string rowFilter, string groupBy)    {      DataTable dt = CreateGroupByTable( tableName, sourceTable, fieldList );      InsertGroupByInto( dt, sourceTable, fieldList, rowFilter, groupBy );      return dt;    }    #endregion    #region Join Tables    public DataTable SelectJoinInto(string tableName, DataTable sourceTable, string fieldList, string rowFilter, string sort)    {      DataTable dt = CreateJoinTable( tableName, sourceTable, fieldList );      InsertJoinInto( dt, sourceTable, fieldList, rowFilter, sort );      return dt;    }    #endregion    #region Create Table    public DataTable CreateTable(string tableName, string fieldList)    {      DataTable dt = new DataTable( tableName );      DataColumn dc;      string[] Fields = fieldList.Split( ',' );      string[] FieldsParts;      string Expression;      foreach ( string Field in Fields )      {        FieldsParts = Field.Trim().Split( " ".ToCharArray(), 3 ); // allow for spaces in the expression        // add fieldname and datatype        if ( FieldsParts.Length == 2 )        {          dc = dt.Columns.Add( FieldsParts[ 0 ].Trim(), Type.GetType( "System." + FieldsParts[ 1 ].Trim(), true, true ) );          dc.AllowDBNull = true;        }        else if ( FieldsParts.Length == 3 ) // add fieldname, datatype, and expression        {          Expression = FieldsParts[ 2 ].Trim();          if ( Expression.ToUpper() == "REQUIRED" )          {            dc = dt.Columns.Add( FieldsParts[ 0 ].Trim(), Type.GetType( "System." + FieldsParts[ 1 ].Trim(), true, true ) );            dc.AllowDBNull = false;          }          else          {            dc = dt.Columns.Add( FieldsParts[ 0 ].Trim(), Type.GetType( "System." + FieldsParts[ 1 ].Trim(), true, true ), Expression );          }        }        else        {          return null;        }      }      if ( ds != null )      {        ds.Tables.Add( dt );      }      return dt;    }    public DataTable CreateTable(string tableName, string fieldList, string keyFieldList)    {      DataTable dt = CreateTable( tableName, fieldList );      string[] KeyFields = keyFieldList.Split( ',' );      if ( KeyFields.Length > 0 )      {        DataColumn[] KeyFieldColumns = new DataColumn[KeyFields.Length];        int i;        for ( i = 1; i == KeyFields.Length - 1; ++i )        {          KeyFieldColumns[ i ] = dt.Columns[ KeyFields[ i ].Trim() ];        }        dt.PrimaryKey = KeyFieldColumns;      }      return dt;    }    #endregion  }}
 


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97超碰国产精品女人人人爽| 日韩国产在线播放| 欧美裸体男粗大视频在线观看| 欧美亚洲国产视频| 热久久99这里有精品| 上原亚衣av一区二区三区| 成人午夜黄色影院| 亚洲欧美在线一区| 国产视频自拍一区| 26uuu日韩精品一区二区| 欧美亚洲另类制服自拍| 亚洲国产婷婷香蕉久久久久久| 亚洲xxxx在线| 亚洲精品国产精品国自产观看浪潮| 国产一区二区三区视频| 色偷偷888欧美精品久久久| 色噜噜亚洲精品中文字幕| 欧美做受高潮1| 68精品国产免费久久久久久婷婷| 国产午夜精品理论片a级探花| 成人免费看吃奶视频网站| 亚洲欧美精品一区| 在线视频精品一| 欧美野外猛男的大粗鳮| 亚洲国产成人久久综合| 久久久欧美一区二区| 国产色综合天天综合网| 深夜精品寂寞黄网站在线观看| 欧美成人在线影院| 国产成人精品免高潮费视频| 国产成人精品国内自产拍免费看| 高跟丝袜欧美一区| 欧美精品九九久久| 国产精品久久久久久久美男| 亚洲精品电影网站| 97超碰蝌蚪网人人做人人爽| 欧美精品久久久久a| 日韩电影在线观看中文字幕| 国产不卡视频在线| 日韩激情视频在线| 亚洲精品福利视频| 国产精品久久久久久久久久新婚| 亚洲电影中文字幕| 国内外成人免费激情在线视频| 欧美激情2020午夜免费观看| 亚洲аv电影天堂网| 国产成人精品优优av| 国产91在线播放九色快色| 欧美激情一级二级| 亚洲美腿欧美激情另类| 成人久久久久久久| 亚洲成人精品久久久| 日本久久久久久久久| 亚洲一区二区久久久久久久| 88国产精品欧美一区二区三区| 欧美视频免费在线观看| 久久不射电影网| 成人黄色大片在线免费观看| www.亚洲免费视频| 日韩性生活视频| 久久久久久国产| 欧美在线观看一区二区三区| 亚洲第一在线视频| 国产亚洲欧美日韩美女| 亚洲在线一区二区| 亚洲аv电影天堂网| 国产精品久久久久久久av电影| 久久久久久国产精品| 精品视频久久久久久久| 亚洲人线精品午夜| 国产在线精品成人一区二区三区| 国产精品高潮呻吟视频| 久久久久久高潮国产精品视| 欧美日韩中文字幕在线视频| 日韩最新中文字幕电影免费看| 福利一区福利二区微拍刺激| 亚洲性夜色噜噜噜7777| 日韩国产精品亚洲а∨天堂免| 亚洲精品国产精品久久清纯直播| 国产一区二区三区直播精品电影| 国内成人精品视频| 国产自产女人91一区在线观看| 亚洲国产成人av在线| 欧美日韩福利电影| 97avcom| 亚洲国产古装精品网站| 亚洲人成网站免费播放| 精品久久久久国产| 国产成人中文字幕| 91色视频在线观看| 欧美激情xxxxx| 成人午夜激情网| 欧美多人乱p欧美4p久久| 亚洲欧美中文日韩在线v日本| 欧美精品激情视频| 国产精品h在线观看| 国产三级精品网站| 秋霞午夜一区二区| 疯狂做受xxxx欧美肥白少妇| 国产精品99久久久久久人| 日本一区二区在线播放| 国产在线高清精品| 538国产精品视频一区二区| 中文字幕亚洲欧美日韩2019| 色黄久久久久久| 亚洲性线免费观看视频成熟| 高清一区二区三区日本久| 日韩在线观看你懂的| 久久久极品av| 国产裸体写真av一区二区| 成人一区二区电影| 国产精品视频地址| 欧美激情国产日韩精品一区18| 成人福利网站在线观看11| 欧美亚洲在线观看| 免费91麻豆精品国产自产在线观看| 久久色在线播放| 欧美一级大片在线免费观看| 亚洲人成在线一二| 国产精品第100页| 欧美另类极品videosbest最新版本| 国产精品日韩久久久久| 成人免费网站在线| 992tv成人免费影院| 久久99精品久久久久久青青91| 最近2019免费中文字幕视频三| 午夜精品久久久久久久久久久久| 国产精品∨欧美精品v日韩精品| 亚洲天堂男人天堂女人天堂| 亚洲福利视频专区| 亚洲欧洲成视频免费观看| 日本高清视频一区| 少妇av一区二区三区| 国产精品精品久久久| 色婷婷**av毛片一区| 日韩在线观看免费全| 欧美激情一区二区三区久久久| 中文字幕日韩精品在线观看| 91中文字幕一区| 久久全国免费视频| 欧美成人国产va精品日本一级| 日韩欧美有码在线| 日韩精品免费在线观看| 国产精品日韩欧美综合| 亚洲自拍偷拍第一页| 精品福利樱桃av导航| 成人午夜高潮视频| 亚洲成av人乱码色午夜| 最新91在线视频| 国产精品久久久精品| 日本精品一区二区三区在线| 日韩在线一区二区三区免费视频| 国产精品视频白浆免费视频| 羞羞色国产精品| 亚洲欧美国产一本综合首页| 亚洲香蕉av在线一区二区三区| 日韩在线一区二区三区免费视频| 日韩在线观看网站| 黄色成人在线免费| 日韩高清欧美高清| www.日本久久久久com.| 亚洲国产精品人久久电影| 91免费在线视频网站| 亚洲成av人片在线观看香蕉|