public List<TaskRoutineGridData> GetDataList(string ComId, string TaskRoutineId)
{
List<TaskRoutineGridData> item;
try
{
var query = from f in db.ProductionLand.Where(a => a.EnterpriseId == ComId && a.IsActive == 1)
join a in db.TaskRoutine.Where(a => a.EnterpriseId == ComId && a.IsFinish == 0) on f.LandId equals a.LandId into temp
from a in temp.DefaultIfEmpty()
join c in db.ProductInfo on a.EntityProductId equals c.ProductId into temp1
from c in temp1.DefaultIfEmpty()
select new TaskRoutineGridData
{
LandId = f.LandId,
EntityProductName = c.ProductName,
LandName = f.LandName,
ProductionType = f.ProductionType,
TaskRoutineId = a.TaskRoutineId,
};
item = query.ToList();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return item;
}
这是我写好的方法,现在根据LandName分类展示ProductName,实现上面那个效果
使用group by或lookup,key使用LandName,而对其值使用string.Join(",",值.OrderBy(t=>t));
示例如下
SELECT * FROM "GMDB"."SYS_LOG" ;
SELECT LOG_TYPE, wm_concat (LOG_CONTENT) LOG_CONTENT FROM "GMDB"."SYS_LOG" GROUP BY LOG_TYPE;
那多张表该怎么查呢
@什么都不会的小胖子: 大致这样吧,具体看你的需求,变通下,可以先把其他的sql写出来,最后和这个join下
SELECT DISTINCT a.LOG_TYPE,b.LOG_CONTENT FROM "GMDB"."SYS_LOG" A LEFT JOIN ( SELECT LOG_TYPE, wm_concat (LOG_CONTENT) LOG_CONTENT FROM "GMDB"."SYS_LOG" GROUP BY LOG_TYPE ) b ON A .LOG_TYPE = b.LOG_TYPE
@文静~: wm_concat什么意思呢
@什么都不会的小胖子: oracle的函数,主要用来实现字段合并,各个数据库都有这个函数,就是名称不一样
@什么都不会的小胖子: wm_concat也可以用LISTAGG来代替
SELECT LOG_TYPE, LISTAGG(LOG_CONTENT,',') WITHIN GROUP (ORDER BY LOG_CONTENT) FROM "GMDB"."SYS_LOG" GROUP BY LOG_TYPE
@文静~sqlsever用什么呢
@什么都不会的小胖子: STUFF 函数,具体百度搜索下,就有很多案例