PDA

View Full Version : ترکیب رکورد های تکراری در یک لیست



PetekDincos
چهارشنبه 20 بهمن 1389, 11:05 صبح
با سلام
ما یک کلاس به صورت زیر داریم




public class Article

{
public int TotalArt { get; set; }
public string ArtName { get; set; }
}




و یک لیست از این کلاس به صورت زیر ایجاد می کنم




List<Article> ListArt = new List<Article>()
{
new Article(){TotalArt=5,ArtName="Art1"},
new Article(){TotalArt=10,ArtName="Art2"},
new Article(){TotalArt=20,ArtName="Art1"}
};



در این لیست کالای Art1 دوبار تکرار شده من می خوام با استفاده از دستورات LINQ کالای Art1 یک بار در لیست بیاید و پراپرتی TotalArt آن بشه مجموع رکوردهای تکراری یعنی 25 بشه با تشکر

saeidgab
چهارشنبه 20 بهمن 1389, 13:23 عصر
سلام، با یه سرچ کوچیک میتونستی جوابتو پیدا کنی.
با این حال یک راهش اینه:

var q = from p in ListArt
group p by p.ArtName into gr
select new Article { ArtName = gr.Key, TotalArt = gr.Sum(p => p.TotalArt) };

PetekDincos
چهارشنبه 20 بهمن 1389, 15:43 عصر
با سلام
من قبل از اینکه سوالم رو مطرح کنم از همین زوش استفاده کردم به این صورت



var q = from p in ListArt
group p by p.ArtName into gr
from n in gr
select new Article { ArtName = gr.Key, TotalArt = gr.Sum(p => p.TotalArt) };


و چون تعداد فیلدهای لیستم زیاده از این خط رو هم اضافه می کنم from n in gr و در قسمت select به صورت n.fieldname استفاده می کنم که این باعث می شه همه رکوردهای تکراری نشون داده بشه برای این حالت چکار کنم با تشکر

PetekDincos
جمعه 22 بهمن 1389, 14:26 عصر
با سلام
از دوستان کسی نبود این مشکل من رو حل کنه با تشکر

#aliyari_C
شنبه 23 بهمن 1389, 00:36 صبح
سلام


List<Article> ListArt = new List<Article>();
ListArt.Add(new Article() { TotalArt = 5, ArtName = "Art1" });
ListArt.Add(new Article() { TotalArt=10,ArtName="Art2"});
ListArt.Add(new Article() { TotalArt=20,ArtName="Art1"});
ListArt.Add(new Article() { TotalArt = 5, ArtName = "Art1" });
List<Article> q = ListArt.Select(g => new { ArtName = g.ArtName, TotalArt = g.TotalArt }).GroupBy(a => a.ArtName).Select(h => new Article { TotalArt = h.Sum(h1 => h1.TotalArt), ArtName = h.Select(d => d.ArtName).Aggregate((t,y)=>y.ToString())} ).ToList<Article>();

StringBuilder s = new StringBuilder();
foreach (Article item in q)
{

s.Append("ArtName : " +item.ArtName +" TotalArt : " +item.TotalArt + Environment.NewLine);

}
MessageBox.Show(s.ToString());



موفق باشي