C# LINQ 如何显示返回空值 高手帮忙解决一下
publicSystem.Nullable<decimal>GetTj_ALL_FZ3(intuid){using(ZGXTContextdb=newZGXTContex...
public System.Nullable<decimal> GetTj_ALL_FZ3(int uid)
{
using (ZGXTContext db = new ZGXTContext())
{var query = from a in db.SupplierShallPays
select new SupplierShallPay_info
{ AmountMoney = a.AmountMoney,
State = a.State,
nowYEAR = System.Data.Entity.SqlServer.SqlFunctions.DateName("yyyy", DateTime.Now),/////取当前年
YEAR = System.Data.Entity.SqlServer.SqlFunctions.DateName("yyyy", a.CreateTime),///取创建日期的年份
YUE = System.Data.Entity.SqlServer.SqlFunctions.DateName("MM", a.CreateTime),///取创建日期的月份
};
query.Where(q => q.State > 0 && q.YUE == "03" && q.YEAR == q.nowYEAR).Select(q => q.AmountMoney).Sum();
}
}
-------------------
1、q.YUE==“03” 是不成立的。因为YUE是取创建日期的月份,数据库没有3月份的数据。
2、发布后出现 到值类型“System.Decimal”的强制转换失败,因为具体化值为 null。结果类型的泛型参数或查询必须使用可以为 null 的类型。
3、如果出现NULL值,是否默认为0。
YEAR YUE nowYEAR 都是虚拟的String 展开
{
using (ZGXTContext db = new ZGXTContext())
{var query = from a in db.SupplierShallPays
select new SupplierShallPay_info
{ AmountMoney = a.AmountMoney,
State = a.State,
nowYEAR = System.Data.Entity.SqlServer.SqlFunctions.DateName("yyyy", DateTime.Now),/////取当前年
YEAR = System.Data.Entity.SqlServer.SqlFunctions.DateName("yyyy", a.CreateTime),///取创建日期的年份
YUE = System.Data.Entity.SqlServer.SqlFunctions.DateName("MM", a.CreateTime),///取创建日期的月份
};
query.Where(q => q.State > 0 && q.YUE == "03" && q.YEAR == q.nowYEAR).Select(q => q.AmountMoney).Sum();
}
}
-------------------
1、q.YUE==“03” 是不成立的。因为YUE是取创建日期的月份,数据库没有3月份的数据。
2、发布后出现 到值类型“System.Decimal”的强制转换失败,因为具体化值为 null。结果类型的泛型参数或查询必须使用可以为 null 的类型。
3、如果出现NULL值,是否默认为0。
YEAR YUE nowYEAR 都是虚拟的String 展开
1个回答
展开全部
可以加个判断
public System.Nullable<decimal> GetTj_ALL_FZ3(int uid)
{
using (ZGXTContext db = new ZGXTContext())
{var query = from a in db.SupplierShallPays
select new SupplierShallPay_info
{ AmountMoney = a.AmountMoney,
State = a.State,
nowYEAR = System.Data.Entity.SqlServer.SqlFunctions.DateName("yyyy", DateTime.Now),/////取当前年
YEAR = System.Data.Entity.SqlServer.SqlFunctions.DateName("yyyy", a.CreateTime),///取创建日期的年份
YUE = System.Data.Entity.SqlServer.SqlFunctions.DateName("MM", a.CreateTime),///取创建日期的月份
};
int num= query.Where(q => q.State > 0 && q.YUE == "03" && q.YEAR == q.nowYEAR).count();
if(num>0 ){
query.Where(q => q.State > 0 && q.YUE == "03" && q.YEAR == q.nowYEAR).Select(q => q.AmountMoney).Sum();
}
}
}
public System.Nullable<decimal> GetTj_ALL_FZ3(int uid)
{
using (ZGXTContext db = new ZGXTContext())
{var query = from a in db.SupplierShallPays
select new SupplierShallPay_info
{ AmountMoney = a.AmountMoney,
State = a.State,
nowYEAR = System.Data.Entity.SqlServer.SqlFunctions.DateName("yyyy", DateTime.Now),/////取当前年
YEAR = System.Data.Entity.SqlServer.SqlFunctions.DateName("yyyy", a.CreateTime),///取创建日期的年份
YUE = System.Data.Entity.SqlServer.SqlFunctions.DateName("MM", a.CreateTime),///取创建日期的月份
};
int num= query.Where(q => q.State > 0 && q.YUE == "03" && q.YEAR == q.nowYEAR).count();
if(num>0 ){
query.Where(q => q.State > 0 && q.YUE == "03" && q.YEAR == q.nowYEAR).Select(q => q.AmountMoney).Sum();
}
}
}
追答
Decimal sum = 0;
int list= query.Where(q => q.State > 0 && q.YUE == "03" && q.YEAR == q.nowYEAR).ToList();
foreach (var item in list)
{
sum+=Convert.ToDecimal(string.IsNullOrEmpty(item.AmountMoney) ? "0" : item.地址);
}
return Decimal ;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询