نکته خیلی مهم : این پست برای مطالعه توصیه نمی شود برای یادگیری LINQ می توانید به " دوره آموزشی LINQ " مراجعه کنید.
عملگرهای اتصال Join Operators
این عملگرها برای متحد کردن چند منبع داده که دارای اشتراکاتی هستند ،استفاده می شود.عملگرهای اتصال در LINQ دقیقا همانند عملگرهای اتصال در SQL عمل می کنند.هر منبع داده ویژگی های کلیدی را دارا می باشد که بوسیله آنها می توان داده ها را مقایسه و جمع آوری نمود.عملگر Join
این عملگر همانند INNER Join در پایگاه داده های رابطه ای عمل می کند یعنی دو مجموعه را بر اساس کلیدهای که در هر دو مرتبط هستند و به عنوان آرگومان به آن ارسال می گردد،ترکیب می کند.این عملگر به فرم زیر است(بدون سربارگذازی):public static IEnumerable<V> Join<T, U, K, V>( this IEnumerable<T> outer, IEnumerable<U> inner, Func<T, K> outerKeySelector, Func<U, K> innerKeySelector, Func<T, U, V> resultSelector);
عملگر Join ترتیب عناصر خارجی را حفط میکند و همچنین برای هر عنصر خارجی، ترتیب عناصر تطبیق داده شده داخلی را حفظ میکند.
در پایگاه داده های رابطه ای عملگرهای Join دیگری همانند left outer joins وجود دارد ولی این نوع اتصالات به صورت صریح درLINQ پیاده سازی نشده ولی در زیر مجموعه قابلیت های عملگر GroupJoin قرار دارند.
در عبارت زیر اشیاء Customerو Order با توجه به مقدار CustomerID به هم دیگر متصل می شوند و در خروجی شئ داریم که شامل نام مشتری و جمع کل سفرش و تاریخ آن است.
var custOrders = customers. Join(orders, c => c.CustomerID, o => o.CustomerID, (c, o) => new { c.Name, o.OrderDate, o.Total } );
var custOrders = from c in customers join o in orders on c.CustomerID equals o.CustomerID select new { c.Name, o.OrderDate, o.Total };
عملگر GroupJoin
از این عملگر زمانی بخواهیم انواع خاصی از Joinها را پیاده سازی کنیم ،که قبلا نیز به آن اشاره کردیم ، همانند left outer joins .فرم کلی این عملگر به صورت زیر است
public static IEnumerable<V> GroupJoin<T, U, K, V>( this IEnumerable<T> outer, IEnumerable<U> inner, Func<T, K> outerKeySelector, Func<U, K> innerKeySelector, Func<T, IEnumerable<U>, V> resultSelector);
var custTotalOrders = from c in customers join o in orders on c.CustomerID equals o.CustomerID into co from o in co.DefaultIfEmpty(emptyOrder) select new { c.Name, o.OrderDate, o.Total };
عملگرهای دسته بندی
این نوع عملگر ها برای دسته بندی عناصر بسته به یک کلید درونی مورد استفاده قرار می گیرند.عملگر GroupBy
این عملگر ،عناصر یک مجموعه را بر اساس یک تابع گذینشی داده شده دسه بندی می کند که دقیقا مشابه عملکرد عبارت GroupBy در SQL است.فرم کلی این عملگر به صورت زیر است
public static IEnumerable<IGrouping<K, T>> GroupBy<T, K>( this IEnumerable<T> source, Func<T, K> keySelector); public static IEnumerable<IGrouping<K, T>> GroupBy<T, K>( this IEnumerable<T> source, Func<T, K> keySelector, IEqualityComparer<K> comparer); public static IEnumerable<IGrouping<K, E>> GroupBy<T, K, E>( this IEnumerable<T> source, Func<T, K> keySelector, Func<T, E> elementSelector); public static IEnumerable<IGrouping<K, E>> GroupBy<T, K, E>( this IEnumerable<T> source, Func<T, K> keySelector, Func<T, E> elementSelector, IEqualityComparer<K> comparer); public interface IGrouping<K, T> : IEnumerable<T> { K Key { get; } }
List<Customer> customers = new List<Customer> { New Customer { CustomerID =0,Name =”Ali”}, New Cusyomer { CustomerID =2,name=”Ahmad”}, New Customer { CustomerID =3,name=”Reza”} }; List<Customer> customs = customers.GroupBy(c=> c.Name);
List<Customer> customs = from c in customers Group c by c.Name;
List<Customer> customs = from c in customers Group new {c.Name ,c.Region} By c.Country;
List<Customer> customs= customers.GroupBy(c=> c.Country , new {c.Name ,c.Region});
هیچ نظری موجود نیست:
ارسال یک نظر