1
首先,我想原谅自己发布类似的问题到其他现有的问题,但我是C#的新手,只开始掌握LINQ。 我有一些业务逻辑跨两个表获得一个行的字段。如果不存在这样的行,它应该只是默认为一个空字符串。 外LINQ这很容易:在表达式树中使用null检查的正确方法
var res = SomeClass.foo?.bar ?? "";
但在LINQ中不支持?.
和??
经营者,所以我使出这样的:
var projectTask = repository.Set<tblProject>().Where(p => includeInactive ||
(p.tblOrderStatus.OrderByDescending(s => s.Date).FirstOrDefault().StatusID != StatusIds.Deducted &&
p.tblOrderStatus.OrderByDescending(s => s.Date).FirstOrDefault().StatusID != StatusIds.Deduc_RestDecays &&
p.tblOrderStatus.OrderByDescending(s => s.Date).FirstOrDefault().StatusID != StatusIds.Cancelled))
.Select(p => new {
p.ID,
p.CustomerID,
p.CenterID,
p.FrameworkID,
p.DeductionmodeID,
p.Code,
p.Descriptioln,
p.StartDate,
p.EndDate,
Referencetext = p.tblOrderHistories.Where(m => m.OrderReferencetypeID == 1).OrderByDescending(m => m.Date).FirstOrDefault() != null ?
p.tblOrderHistories.Where(m => m.OrderReferencetypeID == 1).OrderByDescending(m => m.Date).FirstOrDefault().Referencetext : ""
})
.ToListAsync();
我哪里查询两次,这ISN”在这种情况下性能不佳,但仍不是很优雅。
我知道你可以通过Expression
来构建LINQ表达式,但是我无法完全找到我的例子。
预先感谢您。
谢谢!但是'.FirstOrDefault()'会返回null吗? – drilow
对于可为null的类型,绝对('null'是'XyzOrDefault'中'Default'字的意思) –
这很有意义,很酷。 – drilow