با سلام
ببخشيد كه مدتي بخاطر مشغله كاري نتونستم دوستان رو زيارت كنم.
عرض كنم به حضور همه بزرگواران كه
C# 2:IEnumerable<DataRow> rows = Enumerable.Where(Enumerable.Cast<DataRow>(dt.Rows) , delegate(DataRow row) { return row["Id"] == 5; });
توي اين كد فرض كردم يه كلاس به نام Enumerable وجود داره (كه البته توي NET 3.5. به NET 2.0. الحاق ميشه) كه حاوي يه متد با كد تقريبي زير:
publicstaticclassEnumerable
{
publicstaticIEnumerable<TSource> Where<TSource>(IEnumerable<TSource> source, Predicate<TSource> predicate)
{
foreach (TSource item in source)
if (predicate(item))
yieldreturn item;
}
publicstaticIEnumerable<TSource> Cast<TSource>(IEnumerable source)
{
foreach (TSource item in source)
yieldreturn item;
}
}
.
.
.
متد where، فقط اقلامي رو برميگردونه كه توي شرط predicate صدق كنن. cast هم كه تو اوج سادگي فقط با تبديل آيتمهاي يه IEnumerable به TSource، به كمك Where مياد. anonymouse methodي هم كه بصورت delegate براي متد Where ميره دقيقا مشابه where clouse توي SQL عمل ميكنه.
و كدC# 3:var rows = dt.Rows.Cast<DataRow>().Where(row => return row["Id"] == 5);
هم 100% كد C# 2.0 هست كه تحت قوانين C# 3.0 نوشته شده. يعني به جاي ورش قديمي lambda expression، جايگزين anonymouse method شده.
موفق باشيد