উত্তর:
var query = source.GroupBy(x => new { x.Column1, x.Column2 });
GetHashCode
এবং Equals
পদ্ধতিগুলির সাথে অবিচ্ছেদ্য শ্রেণি । তারা যেখানে ব্যবহারের ক্ষেত্রে ঠিক এই ধরণের জন্য নকশাকৃত।
GroupBy
একটি অভ্যন্তরীণ গণনার উপর সম্পত্তি সহ একটি IEnumerable<IGrouping<TKey, TSource>>
যা মূলত একটি প্রদান IEnumerable<IEnumerable<TSource>>
করে Key
। এটি কী আপনাকে গ্রুপ আইটেমগুলির "আইনিউমারেবল" পেতে সহায়তা করে?
যদি আপনার টেবিলটি এমন হয়
rowId col1 col2 col3 col4
1 a e 12 2
2 b f 42 5
3 a e 32 2
4 b f 44 5
var grouped = myTable.AsEnumerable().GroupBy(r=> new {pp1 = r.Field<int>("col1"), pp2 = r.Field<int>("col2")});
এগিয়ে নিয়ে যাওয়ার aduchis উপরে উত্তর - আপনি তারপর কী করে সেই দলের উপর ভিত্তি করে ফিল্টার, আপনি একটি বর্গ অনেক চাবি মোড়ানো বর্ণনা করতে পারেন।
return customers.GroupBy(a => new CustomerGroupingKey(a.Country, a.Gender))
.Where(a => a.Key.Country == "Ireland" && a.Key.Gender == "M")
.SelectMany(a => a)
.ToList();
যেখানে গ্রাহকগ্রুপিংকি গ্রুপ কীগুলি গ্রহণ করে:
private class CustomerGroupingKey
{
public CustomerGroupingKey(string country, string gender)
{
Country = country;
Gender = gender;
}
public string Country { get; }
public string Gender { get; }
}
class Element
{
public string Company;
public string TypeOfInvestment;
public decimal Worth;
}
class Program
{
static void Main(string[] args)
{
List<Element> elements = new List<Element>()
{
new Element { Company = "JPMORGAN CHASE",TypeOfInvestment = "Stocks", Worth = 96983 },
new Element { Company = "AMER TOWER CORP",TypeOfInvestment = "Securities", Worth = 17141 },
new Element { Company = "ORACLE CORP",TypeOfInvestment = "Assets", Worth = 59372 },
new Element { Company = "PEPSICO INC",TypeOfInvestment = "Assets", Worth = 26516 },
new Element { Company = "PROCTER & GAMBL",TypeOfInvestment = "Stocks", Worth = 387050 },
new Element { Company = "QUASLCOMM INC",TypeOfInvestment = "Bonds", Worth = 196811 },
new Element { Company = "UTD TECHS CORP",TypeOfInvestment = "Bonds", Worth = 257429 },
new Element { Company = "WELLS FARGO-NEW",TypeOfInvestment = "Bank Account", Worth = 106600 },
new Element { Company = "FEDEX CORP",TypeOfInvestment = "Stocks", Worth = 103955 },
new Element { Company = "CVS CAREMARK CP",TypeOfInvestment = "Securities", Worth = 171048 },
};
//Group by on multiple column in LINQ (Query Method)
var query = from e in elements
group e by new{e.TypeOfInvestment,e.Company} into eg
select new {eg.Key.TypeOfInvestment, eg.Key.Company, Points = eg.Sum(rl => rl.Worth)};
foreach (var item in query)
{
Console.WriteLine(item.TypeOfInvestment.PadRight(20) + " " + item.Points.ToString());
}
//Group by on multiple column in LINQ (Lambda Method)
var CompanyDetails =elements.GroupBy(s => new { s.Company, s.TypeOfInvestment})
.Select(g =>
new
{
company = g.Key.Company,
TypeOfInvestment = g.Key.TypeOfInvestment,
Balance = g.Sum(x => Math.Round(Convert.ToDecimal(x.Worth), 2)),
}
);
foreach (var item in CompanyDetails)
{
Console.WriteLine(item.TypeOfInvestment.PadRight(20) + " " + item.Balance.ToString());
}
Console.ReadLine();
}
}
আমি ডেভিডের উত্তরের মতো ক্লাস সংজ্ঞায়িত করার মিশ্রণ নিয়ে এসেছি, তবে ক্লাসটি এর সাথে যাওয়ার দরকার নেই। দেখে মনে হচ্ছে এটির মতো:
var resultsGroupings = resultsRecords.GroupBy(r => new { r.IdObj1, r.IdObj2, r.IdObj3})
.Select(r => new ResultGrouping {
IdObj1= r.Key.IdObj1,
IdObj2= r.Key.IdObj2,
IdObj3= r.Key.IdObj3,
Results = r.ToArray(),
Count = r.Count()
});
private class ResultGrouping
{
public short IdObj1{ get; set; }
public short IdObj2{ get; set; }
public int IdObj3{ get; set; }
public ResultCsvImport[] Results { get; set; }
public int Count { get; set; }
}
resultRecords
আমার প্রাথমিক তালিকাটি আমি কোথায় গ্রুপ করছি, এবং এটির একটি List<ResultCsvImport>
। মনে রাখবেন যে এখানে ধারণাটি হ'ল, আমি 3 টি কলাম, আইডোবিজে 1 এবং আইডোবিজে 2 এবং আইডোবিজে 3 দিয়ে গ্রুপ করছি