在linq查询中,将可为null的int转换为int,返回匿名类型
本文关键字:int 返回 转换 类型 linq 查询 null | 更新日期: 2023-09-27 17:58:18
这里是返回anonymous type
的实体查询的简单linq。问题是其中一个int?
值使用了类似参数的值来获得另一个值,即int
。
我所知道的所有方法都不起作用。请建议如何解决这个问题。
public IQueryable<toursistdata> GetxTouristByCategory(string category)
{
var now = System.DateTime.MinValue;
int i;
switch (category)
{
case "arrival":
now = System.DateTime.Now.AddDays(-3);
var arrival = from a in db.xTourist
where a.ArrDate >= now && a.Room == null
select new toursistdata
{
kodt = a.Kod,
name = a.Name,
paxad = a.Paxad,
paxch = a.Paxch,
**//Here is h.Kod is int but KodH is int?**
hotel = (from h in db.Address where h.Kod = (int)a.KodH.HasValue select h.NameC).FirstOrDefault(),
room = a.Room,
arrdate = a.ArrDate,
arrtime = a.ArrTime,
arrflight = a.ArrFl,
depdate = a.DepDate,
deptime = a.Deptime,
depflight = a.DepFlight,
transfer = a.Transfer
};
return arrival;
case "inhouse":
now = System.DateTime.Today;
//return db.xTourist.AsQueryable().Where(p => p.Датапр >= now && p.Номер != null).OrderByDescending(p => p.Датапр);
default:
//return db.xTourist.AsQueryable();
}
}
首先,equals运算符中缺少一个'='。那么,如果你想比较一个int和一个int?您可以使用Null合并运算符??要为null case提供默认值,请将其强制转换为int:
h.Kod == (a.KodH ?? 0)
故障线路应读取
- 如果您确定可为null的int有一个值
from h in db.Адреса where h.Kod = a.KodH.Value select h.NameC).FirstOrDefault()
- 或者如果nullable可以为null,则使用默认值
from h in db.Адреса where h.Kod = (a.KodH ?? -1) select h.NameC).FirstOrDefault()
-或-
from h in db.Адреса
where a.KodH!= null && h.Kod= a.KodH.Value
select h.NameC).FirstOrDefault()
有关使用可为null类型的更多详细信息,请参阅MSDN Documentation