以下代码中的第一个三元语句返回“null”。 myID将返回null。但是,如果三元语句正常工作,并且a.someID为null,那么myID应该返回-1。 myID是一个可以为空的int字段。你知道为什么我没有回到-1吗?感谢。
public List<myView> GetRecords()
{
myEntities entities = new myEntities();
var myValue = (from a in entities.myEntitiesA
join b in entities.myEntitiesB on a.myID equals b.myID into myEntitesC
from c in myEntitesC.DefaultIfEmpty()
select new myView
{
myID = a.someID == null ? -1 : a.someID,
myName = a.myName,
myAlternateID = c.myID == null ? -1 : c.myID,
myAlternateName = c.myName == null ? "" : c.myName,
}).Distinct().OrderBy(b => b.myName).ToList();
return (myValue);
}
编辑 - 为了测试我已经摆脱了DefaultIfEmpty(),但我的结果是一样的。
答案 0 :(得分:0)
我想您可能想要使用??
// y = x, unless x is null, in which case y = -1.
int y = x ?? -1;
答案 1 :(得分:0)
from c in myEntitesC.DefaultIfEmpty()
select new myView
{
...
myAlternateID = c.myID == null ? -1 : c.myID,
如果c为空,该怎么办?
myAlternateID = (c == null || c.myID == null) ? -1 : c.myID,
Linq是一种使用通用语法针对许多不同实现声明查询的方法。您的特定查询实现可能不是LinqToObjects(在静态类System.Linq.Enumerable
中实现)。要获得最佳答案,最好指定执行查询的系统。
答案 2 :(得分:0)
可能正在触发DefaultIfEmpty()例程,因此您的三元运算符未被执行,而是正在创建一个新的myView。
答案 3 :(得分:0)
虽然所有其他答案看似有效,但它们都不适用于我。因为我从JsonResult控制器方法调用这个GetRecords()方法,所以我最终在我的JsonResult上执行了额外的逻辑,第二次检查NULL。当然,这是一个冗余的检查,因此它并不理想,但它可以工作。