.net - একাধিক কলাম দ্বারা গ্রুপ




linq group-by (8)

LINQ এ একাধিক কলামের মাধ্যমে আমি কিভাবে গোষ্ঠী করতে পারি

এসকিউএল এর অনুরূপ কিছু:

SELECT * FROM <TableName> GROUP BY <Column1>,<Column2>

আমি কিভাবে এটি LINQ এ রূপান্তর করতে পারি:

QuantityBreakdown
(
    MaterialID int,
    ProductID int,
    Quantity float
)

INSERT INTO @QuantityBreakdown (MaterialID, ProductID, Quantity)
SELECT MaterialID, ProductID, SUM(Quantity)
FROM @Transactions
GROUP BY MaterialID, ProductID

আপনি দৃঢ়ভাবে টাইপ করা গোষ্ঠীগুলির জন্য Tuple <> ব্যবহার করতে পারেন।

from grouping in list.GroupBy(x => new Tuple<string,string,string>(x.Person.LastName,x.Person.FirstName,x.Person.MiddleName))
select new SummaryItem
{
    LastName = grouping.Key.Item1,
    FirstName = grouping.Key.Item2,
    MiddleName = grouping.Key.Item3,
    DayCount = grouping.Count(), 
    AmountBilled = grouping.Sum(x => x.Rate),
}

উল্লেখ্য একটি জিনিস আপনি Lambda এক্সপ্রেশন জন্য একটি বস্তু পাঠাতে প্রয়োজন এবং একটি বর্গ জন্য একটি উদাহরণ ব্যবহার করতে পারবেন না।

উদাহরণ:

public class Key
{
    public string Prop1 { get; set; }

    public string Prop2 { get; set; }
}

এই কম্পাইল হবে কিন্তু প্রতি চক্র একটি উৎপন্ন করবে।

var groupedCycles = cycles.GroupBy(x => new Key
{ 
  Prop1 = x.Column1, 
  Prop2 = x.Column2 
})

যদি আপনি কী বৈশিষ্ট্যের নাম দিতে না চান এবং তারপরে সেগুলি পুনরুদ্ধার করেন তবে আপনি এটির পরিবর্তে এটি করতে পারেন। এটি সঠিকভাবে GroupBy এবং আপনি কী বৈশিষ্ট্য দিতে হবে।

var groupedCycles = cycles.GroupBy(x => new 
{ 
  Prop1 = x.Column1, 
  Prop2= x.Column2 
})

foreach (var groupedCycle in groupedCycles)
{
    var key = new Key();
    key.Prop1 = groupedCycle.Key.Prop1;
    key.Prop2 = groupedCycle.Key.Prop2;
}

একটি বেনামী টাইপ ব্যবহার করুন।

যেমন

group x by new { x.Column1, x.Column2 }

একাধিক কলাম দ্বারা গোষ্ঠীর জন্য, এর পরিবর্তে এটি ব্যবহার করে দেখুন ...

GroupBy(x=> new { x.Column1, x.Column2 }, (key, group) => new 
{ 
  Key1 = key.Column1,
  Key2 = key.Column2,
  Result = group.ToList() 
});

একই ভাবে আপনি কলাম 3, কলাম 4 ইত্যাদি যোগ করতে পারেন।


ঠিক আছে এই হিসাবে পেয়েছিলাম:

var query = (from t in Transactions
             group t by new {t.MaterialID, t.ProductID}
             into grp
                    select new
                    {
                        grp.Key.MaterialID,
                        grp.Key.ProductID,
                        Quantity = grp.Sum(t => t.Quantity)
                    }).ToList();

প্রক্রিয়াগত নমুনা

.GroupBy(x => new { x.Column1, x.Column2 })

.GroupBy(x => (x.MaterialID, x.ProductID))


var Results= query.GroupBy(f => new { /* add members here */  });




aggregate