【发布时间】:2021-04-08 06:41:27
【问题描述】:
我想总结一段时间内在两个位置使用了多少项目,但我卡在了控制器上
SQL 查询:
select ITEMID,
ITEM_NAME,
ITEM_TYPE,
sum(case when PROVIDERID = 'PR000118' then QUANTITY else 0 end) as EAST,
sum(case when PROVIDERID = 'PR000124' then QUANTITY else 0 end) as WEST,
sum(QUANTITY) as TOTAL
from V_ITEMUSAGE
where DATETIME >= '2021-03-01' and DATETIME <= '2021-03-31' and ITEM_TYPE like '%%'
group by ITEMID, ITEM_NAME, ITEM_TYPE
order by TOTAL desc
视图模型:
namespace HMO.viewmodel
{
public class Itemusageviewmodel
{
public IEnumerable<ITEMTYPE> ITEMTYPEs{ get; set; }
public IEnumerable<V_ITEMUSAGE> V_ITEMUSAGEs{ get; set; }
}
}
控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Itemusage (DateTime STARTDATE, DateTime ENDDATE, String TYPE)
{
var table = new Itemusageviewmodel
{
ITEMTYPEs = db.ITEMTYPE.tolist(),
V_ITEMUSAGEs = db.V_ITEMUSAGE
.Where(x => m.DATETIME >= STARTDATE && x.DATETIME <= ENDDATE && x.ITEM_TYPE.Contains(TYPE))
//(I don't know what code I should use here)//
};
return View(table);
}
我希望 Controller 的结果 V_ITEMUSAGEs 与 SQL 查询的结果相同,我如何编写 V_ITEMUSAGEs 的代码?
谢谢
【问题讨论】:
-
您尝试过 GroupBy 吗? docs.microsoft.com/en-us/ef/core/querying/…
-
您拥有可以满足您需求的 SQL;为什么不直接使用那个SQL?您不必将所有内容都转换为 LINQ,而且并非所有内容都可以表示为 LINQ。
-
感谢您的建议。我缺乏 C# 编程语言的经验,因为我开始使用它才 1 个月。
-
@MarcGravell 如果只使用那个 SQL 查询,如何实现它?因为对于 C#,我只知道使用 LINQ 进行全选和 where 条件。如果你能解释一下,我帮助了
-
@SDG 假设
db这里是实体框架:docs.microsoft.com/en-us/ef/core/querying/raw-sql
标签: c# sql-server linq asp.net-mvc-4