Вы можете попробовать сгруппировать только по itemNo
и itemDesc
, а затем использовать string.Join
для подключения строковых значений.
Вы можете попробовать сначала использовать данные linq to SQL select
из БД, затемdo linq group by
.
var summaryList = (from summary in dataContext.Q_TBL_INVENTORY_SUMMARIES
select summary).ToList();
var result = from i in summaryList
group i by new
{
itemNo = i.itemNo,
itemDesc = i.itemDesc
} into grp
select new
{
itemNo = grp.Key.itemNo,
buyerNo = string.Join(",", grp.Select(i => i.buyerNo)),
sellerNo = string.Join(",", grp.Select(i => i.sellerNo)),
itemDesc = grp.Key.itemDesc
};
c # demo
Результат
1 B1 S1 Item1
2 B2,B3 S2,S3 Item2
3 B4,B5 S4,S5 Item3
РЕДАКТИРОВАТЬ
Из-за Linq-to-SQL не может перевести на SQL (спасибо за @Panagiotis Kanavos указать)
Я бы посоветовал вам выполнитьОператор SQL методом EF
SqlQuery
, который может дать ожидаемый результат от DB
.затем связывание с помощью ORM
.
Производительность может быть лучше, чем у моего первого решения.
Создать SummaryDTO
для переноса ваших результатов.
public class SummaryDTO {
public int itemNo { get; set; }
public string buyerNo { get; set; }
public string sellerNo { get; set; }
public string itemDesc { get; set; }
}
var result = dataContext.Q_TBL_INVENTORY_SUMMARIES
.SqlQuery("SELECT itemNo,
group_concat(buyerNo) buyerNo,
group_concat(sellerNo) sellerNo,
itemDesc
FROM summary
GROUP BY itemNo").ToList<SummaryDTO>();