如何使用条件语句返回IEnumerableLinq值
本文关键字:IEnumerableLinq 返回 语句 何使用 条件 | 更新日期: 2023-09-27 18:01:51
我在IEnumerable
Linq查询中有一个条件"if... else if..."
语句。我得到以下错误:
并非所有代码路径都返回值
下面是我的代码。
public IEnumerable<SASF> GetLongReportData(string commSubGp)
{
var context = new Entities();
string myDate = "2014-03-18";
DateTime date = Convert.ToDateTime(myDate);
if (commSubGp == "F00")
{
var getAgriculture = from a in context.SASF
where a.RDate == date &&
a.COMM_SGP.CompareTo("F00") <= 0
orderby a.Conmkt, a.MKTTITL descending
select a;
return getAgriculture.ToList();
}
else if (commSubGp == "n10")
{
var getPetroleum = from p in context.SASF
where p.RDate == date &&
p.COMM_SGP == "n10"
orderby p.Conmkt, p.MKTTITL descending
select p;
return getPetroleum.ToList();
}
return ??????; // what should be here?
}
根据需要,典型的方法是返回null
,一个空的可枚举Enumerable.Empty<SASF>()
或抛出一个ArgumentException
。
如果"F00"answers"n10"是commSubGp
唯一可以具有的有效值,则应该为此参数抛出ArgumentException。在这种情况下,编译器将停止要求返回。
更干净:将此参数设为枚举或布尔。例如,仅具有值Agriculture
和Petroleum
的枚举ReportType
。
您正在查询几乎相似的查询,并在过滤后按相同的列排序。如果使用switch语句添加特定的筛选器,并在有人提供了不受支持的参数时抛出未实现的异常,则可以使代码更易于维护,而且必须以某种方式处理null参数的情况。
public IEnumerable<SASF> GetLongReportData(string commSubGp)
{
var context = new Entities();
var date = Convert.ToDateTime("2014-03-18");
var sasf = (from s context.SASF
where a.RDate == date
select s);
if (!String.IsNullOrEmpty(commSubGp))
{
switch (commSubGp)
{
case "F00":
sasf = (from s in sasf
s.COMM_SGP.CompareTo("F00") <= 0
select s);
break;
case "n10":
sasf = (from s in sasf
s.COMM_SGP == "n10"
select s);
break;
default:
throw new NotImplementedException(String.Format("commSubGp {0} not implemented", commSubGp));
}
}
else
{
throw new ArgumentNullException("Parameter commSubGp is null");
}
return sasf.OrderBy(p => p.Conmkt).ThenByDescending(p => p.MKTTITL).ToList();
}
我想这取决于您实际想要返回的内容
return Enumerable.Empty<SASF>();
或
return null;
或者抛出异常。。。
return new List<SASF>();
或者异常或null。
实际上并没有那么难。在if案例之上创建结果并返回。
您的默认结果是一个空的
对于其他情况和/或未来的情况,创建一个根据正确标准填写的情况
public IEnumerable<SASF> GetLongReportData(string commSubGp)
{
var context = new Entities();
//ALSO Change
//string myDate = "2014-03-18";
//DateTime date = Convert.ToDateTime(myDate);
var date = new DateTime(2014,3,18);
//Create a result in the type you want to return.
var result = new List<SASF>();
switch(commSubGp)
{
case "F00": //Agriculture
result = (from a in context.SASF
where a.RDate == date &&
a.COMM_SGP.CompareTo(commSubGp) <= 0
orderby a.Conmkt, a.MKTTITL descending
select a).ToList();
break;
case "n10": //petroleum
result = (from p in context.SASF
where p.RDate == date &&
p.COMM_SGP == commSubGp
orderby p.Conmkt, p.MKTTITL descending
select p).ToList();
break;
}
return result;
}
将新变量定义为
IEnumerable<SASF> sasf = null;
并返回return sasf;
public IEnumerable<SASF> GetLongReportData(string commSubGp)
{
IEnumerable<SASF> sasf;
if(condition)
{
//your stuff and put it in sasf
}
else if(condition)
{
//your stuff and put it in sasf
}
return sasf;
}