In sql, we familiar to use key like "select", "where", "order by", and more.
Now, i'am try to implement that into .NET 2.0
Example:
| col1 | col2 |
| Ronald | True |
| Eriawan | True |
| Nicko | False |
How to get col1 members where col2 value is True ?
SQL-Query
SELECT [col1] FROM [tbl] WHERE [col2] = 'True' ;
.NET 2.0
//Give conditionIEnumerable<DataRow> iEnumDataRow= csQuery.Where<DataRow>(Datarow [], delegate(DataRow row) { return Convert.ToBoolean(row[col2]) ; }) ;
//Get DataIEnumerable<string> iEnumString = csQuery.Select<DataRow, string>(iEnumDataRow, delegate(DataRow row) { return row[col1].ToString(); });
//View DataList<string> listString = new List<string>(iEnumString);
Lets make the simple class, for example csQuery.
public delegate TResult Func<TSource, TResult>(TSource arg);
public static class csQuery
{public static IEnumerable<TSource> Where<TSource>(IEnumerable<TSource> source, Func<TSource, bool> predicate)
{if (source == null)
throw new ArgumentNullException(source.GetType().ToString());
if (predicate == null)
throw new ArgumentNullException(predicate.GetType().ToString());
return WhereIterator<TSource>(source, predicate);}
private static IEnumerable<TSource> WhereIterator<TSource>(IEnumerable<TSource> source, Func<TSource, bool> predicate)
{foreach (TSource var in source)
{ if (predicate(var))yield return var;
}
}
public static IEnumerable<TResult> Select<TSource, TResult>(IEnumerable<TSource> source, Func<TSource, TResult> selector)
{if (source == null)
throw new ArgumentNullException(source.GetType().ToString());
if (selector == null)
throw new ArgumentNullException(selector.GetType().ToString());
return SelectIterator<TSource, TResult>(source, selector);}
private static IEnumerable<TResult> SelectIterator<TSource, TResult>(IEnumerable<TSource> source, Func<TSource, TResult> selector)
{foreach (TSource var in source)
{yield return selector(var);
}
}
}
No comments:
Post a Comment