首页 > 解决方案 > 如何在 c# linq 中添加 sql 'when' 功能

问题描述

我有以下参数:

public object GetDataByProjectCostID(string employeeid, DateTime costdate, int id = 0)

和查询:

var projectCost = (from pc in db.ProjectCosts
                           where pc.ProjectCostID == id
                           where System.Data.Entity.DbFunctions.TruncateTime(pc.CostDate) == costdate.Date
                          
                           join p in db.Projects
                           on pc.ProjectID equals p.ProjectID

                           join sct in db.SubCostTypes
                           on pc.SubCostTypeID equals sct.SubCostTypeID

                           join ct in db.CostTypes
                           on sct.CostTypeID equals ct.CostTypeID

                           select new
                           {
                               p.ProjectName,
                               ct.CostTypeName,
                               ct.CostTypeID,
                               sct.SubCostTypeName,
                               pc.ProjectID,
                               pc.ProjectCostID,
                               pc.SubCostTypeID,
                               pc.Amount,
                               pc.Quantity,
                               pc.Note,
                               pc.CreatedBy,
                               sct.Unit,
                               pc.CreateDate,
                               pc.CostDate,
                               pc.ProjectCostImage


                           }).ToList();

现在我的问题是如何在查询中添加可选参数。假设如果请求中不存在 id 那么我需要跳过 where 子句

其中 pc.ProjectCostID == id

在 sql 中我们可以使用 when 子句,但是在 LINQ 中呢?提前致谢。

标签: c#linq.net-coreentity-framework-coreoptional-parameters

解决方案


尝试这个

 where (( id==0 || pc.ProjectCostID == id)
 && System.Data.Entity.DbFunctions.TruncateTime(pc.CostDate) == costdate.Date)

推荐阅读