【发布时间】:2016-03-10 20:33:05
【问题描述】:
我有如下的 sql 查询,
T-SQL 查询
SELECT
6,
O.SUGGESTION,
0
,CASE
WHEN MAX(PCO.PARENT_OPTION_ID) IS NOT NULL THEN MAX(PCO.SUGGESTION_TYPE)
ELSE MAX(O.SUGGESTION_TYPE)
END AS SUGGESTION_TYPE
,O.EXAMPLE_IMAGE_ID,x.VISIT_DATE+O.COMPLETE_TIME as COMPLETE_TIME
FROM
(SELECT * FROM SURVEY WHERE SURVEY_ID = 6 OR PARENT_SURVEY_ID = 6) S
join SURVEY_X x on x.SURVEY_ID = s.SURVEY_ID
JOIN SURVEY_ANSWER_SELECTION SA (NOLOCK) ON S.SURVEY_ID = SA.SURVEY_ID
JOIN REP_OPTION O (NOLOCK) ON SA.OPTION_ID = O.OPTION_ID
LEFT JOIN REP_PARENT_CHILD_OPTIONS PCO (NOLOCK) ON SA.OPTION_ID = PCO.CHILD_OPTION_ID
LEFT JOIN SURVEY_ANSWER_SELECTION SAP (NOLOCK) ON SAP.OPTION_ID = PCO.PARENT_OPTION_ID AND SAP.SURVEY_ID = S.SURVEY_ID
WHERE 1 = 1
AND (S.SURVEY_ID = 6 OR S.PARENT_SURVEY_ID = 6)
AND PCO.SUGGESTION_TYPE != 0
AND O.SUGGESTION IS NOT NULL
AND SAP.OPTION_ID IS NOT NULL
GROUP BY O.SUGGESTION,O.EXAMPLE_IMAGE_ID,COMPLETE_TIME,VISIT_DATE
我正在尝试将上面的 t sql 转换为 linq。
我尝试如下转换
Linq 查询
var result =
(from s in context.SURVEY
where s.SURVEY_ID == 6 || s.PARENT_SURVEY_ID == 6
join x in context.SURVEY_X on s.SURVEY_ID equals x.SURVEY_ID
join sa in context.SURVEY_ANSWER_SELECTION on s.SURVEY_ID equals sa.SURVEY_ID
join o in context.REP_OPTION on sa.OPTION_ID equals o.OPTION_ID
from pco in context.REP_PARENT_CHILD_OPTIONS.Where(w => w.CHILD_OPTION_ID == sa.OPTION_ID).DefaultIfEmpty()
from sap in context.SURVEY_ANSWER_SELECTION.Where(w => w.OPTION_ID == pco.PARENT_OPTION_ID && w.SURVEY_ID == s.SURVEY_ID).DefaultIfEmpty()
where
1 == 1 &&
(s.SURVEY_ID == 6 || s.PARENT_SURVEY_ID == 6) &&
pco.SUGGESTION_TYPE != 0 &&
o.SUGGESTION != null &&
sap.OPTION_ID != null
select new
{
SURVEY_ID = 6,
SUGGESTION = o.SUGGESTION,
DISPLAY_ORDER = 0,
//SUGGESTION_TYPE = 1,
o.EXAMPLE_IMAGE_ID,
COMPLETE_TIME = (x.VISIT_DATE.HasValue && o.COMPLETE_TIME.HasValue ? DbFunctions.AddDays(x.VISIT_DATE, o.COMPLETE_TIME.Value) : (DateTime?)null)
}).GroupBy(y => new { y.SURVEY_ID, y.SUGGESTION, y.DISPLAY_ORDER, y.EXAMPLE_IMAGE_ID, y.COMPLETE_TIME }).ToList();
问题:
如何在选择列时在我的 linq 查询中转换下面的 t sql 查询?
CASE
WHEN MAX(PCO.PARENT_OPTION_ID) IS NOT NULL THEN MAX(PCO.SUGGESTION_TYPE)
ELSE MAX(O.SUGGESTION_TYPE)
END AS SUGGESTION_TYPE
任何帮助将不胜感激。
谢谢。
【问题讨论】:
标签: c# sql-server entity-framework linq