我的查询显示以下内容:
╔════════╦═════════╦══════════╦══════════╗
║ itemNo ║ buyerNo ║ sellerNo ║ itemDesc ║
╠════════╬═════════╬══════════╬══════════╣
║ 1 ║ B1 ║ S1 ║ Item1 ║
╠════════╬═════════╬══════════╬══════════╣
║ 2 ║ B2 ║ S2 ║ Item2 ║
╠════════╬═════════╬══════════╬══════════╣
║ 2 ║ B3 ║ S3 ║ Item2 ║
╠════════╬═════════╬══════════╬══════════╣
║ 3 ║ B4 ║ S4 ║ Item3 ║
╠════════╬═════════╬══════════╬══════════╣
║ 3 ║ B5 ║ S5 ║ Item3 ║
╚════════╩═════════╩══════════╩══════════╝
在上表中,itemNo
2
和3
是重复的。
如果发现buyerNo
被复制,我想将sellerNo
和itemNo
分组到同一个单元格中。每个itemDesc
的{{1}}都相同。
itemNo
以下是我当前的查询:
╔════════╦═════════╦══════════╦══════════╗
║ itemNo ║ buyerNo ║ sellerNo ║ itemDesc ║
╠════════╬═════════╬══════════╬══════════╣
║ 1 ║ B1 ║ S1 ║ Item1 ║
╠════════╬═════════╬══════════╬══════════╣
║ 2 ║ B2, B3 ║ S2, S3 ║ Item2 ║ <-itemNo 2 combined
╠════════╬═════════╬══════════╬══════════╣
║ 3 ║ B4, B5 ║ S4, S5 ║ Item3 ║ <-itemNo 3 combined
╚════════╩═════════╩══════════╩══════════╝
然后将其解析为我的主要方法:
public IQueryable GetAllInventorySummary()
{
var query = from summary in dataContext.Q_TBL_INVENTORY_SUMMARIES
group summary by new
{
itemNo = summary.itemNo,
buyerNo= summary.buyerNo,
sellerNo= summary.sellerNo,
itemDesc = summary.itemDesc,
} into grp
select new
{
itemNo = grp.Key.itemNo ,
buyerNo= grp.Key.buyerNo,
sellerNo= grp.Key.sellerNo,
itemDesc = grp.Key.itemDesc,
};
return query;
}
答案 0 :(得分:0)
您必须使用 <Drawer
type="static"
content={<Menu closeDrawer={ () => this.drawer.close() }/>}
openDrawerOffset={100}
tweenHandler={Drawer.tweenPresets.parallax}
tapToClose={true}
ref={ (ref) => this.drawer = ref}
>
<Router>
<Scene key="gallery" />
<Scene key="logout" />
</Scene>
</Router>
</Drawer>
函数才能获得预期的输出。
GROUPBY and GROUP_CONCAT
答案 1 :(得分:0)
您可以尝试仅按itemNo
和itemDesc
进行分组,然后使用string.Join
连接字符串值。
您可以先尝试使用linq对来自数据库的SQL select
数据进行处理,然后再使用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
};
结果
1 B1 S1 Item1
2 B2,B3 S2,S3 Item2
3 B4,B5 S4,S5 Item3
编辑
由于 Linq-to-SQL 无法转换为SQL(感谢@Panagiotis Kanavos指出)
我建议您通过EF
SqlQuery
方法执行SQL语句,这可以使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>();