如何在c#中的if条件之外访问值

时间:2017-03-30 09:10:23

标签: c# sql entity

如何在if条件之外使用此'下载'?

if (rblFinancialYear.Checked)
{
  var download = (from appraisals in dbClientContext.PmsAppraisalActivityMasters 
                    select new
                    {
                      appraisalActivityMasteId = appraisals.AppraisalActivityMasterID,
                      empId = appraisals.EmpID,
                    })
                    Where(r => r.kpiStartDate >= dtFYStart && r.kpiStartDate <= dtFYEnd).ToList();
}   

如果我使用返回类型返回意味着我在这里使用哪种数据类型。

3 个答案:

答案 0 :(得分:1)

然后在if条件之外创建具有类似

的精确类型的变量
type download = null;  
if (rblFinancialYear.Checked)
{
  //rest code
}

看起来您正在投射Anomymous类型,如下所示,因此除了使用var之外别无他法,并且使用var创建变量是非法的。

                select new
                {
                  appraisalActivityMasteId = appraisals.AppraisalActivityMasterID,
                  empId = appraisals.EmpID,
                })

这个解决方案是创建一个DTO或ViewModel并使用它来代替

public class TestViewModel
{
  public int appraisalActivityMasteId {get; set; }
  public int empId {get; set; }
}

//创建变量

List<TestViewModel> model = null;

现在您可以像

一样使用它
model = (from appraisals in dbClientContext.PmsAppraisalActivityMasters 
                    select new TestViewModel
                    {
                      appraisalActivityMasteId = appraisals.AppraisalActivityMasterID,
                      empId = appraisals.EmpID,
                    })
                    Where(r => r.kpiStartDate >= dtFYStart && r.kpiStartDate <= dtFYEnd).ToList();
}   

答案 1 :(得分:0)

你应该像这样创建单独的类:

public class MyDTO
{
   public int appraisalActivityMasteId {get; set;}
   public int empId {get; set;}
}

Maby你应该使用不同的属性类型。然后在像这样的代码中使用它:

List<MyDTO> download  = new List<MyDTO>();
if (rblFinancialYear.Checked)
{
   download = (from appraisals in dbClientContext.PmsAppraisalActivityMasters 
                    select new MyDTO //note this
                    {
                      appraisalActivityMasteId = appraisals.AppraisalActivityMasterID,
                      empId = appraisals.EmpID,
                    })
                    .Where(r => r.kpiStartDate >= dtFYStart 
                       && r.kpiStartDate <= dtFYEnd).ToList();
}   

答案 2 :(得分:0)

您可以尝试将下载变量设为对象类型,然后将其投射到您计划使用时使用的类型。

object download;
if(TRUE)
{

    download = (from appraisals in dbClientContext.PmsAppraisalActivityMasters 
                        select new
                        {
                          appraisalActivityMasteId = appraisals.AppraisalActivityMasterID,
                          empId = appraisals.EmpID,
                        })
                        Where(r => r.kpiStartDate >= dtFYStart && r.kpiStartDate <= dtFYEnd).ToList();

}

可能会工作。

至于您当前的实现,如上面的代码段示例所示。无法访问 IF语句之外的下载变量。它超出了范围。