Linq查询可能是null属性不是

时间:2013-08-01 12:48:00

标签: c# sql linq nullable

我有一个属性 NOT null(这是一个PK)。但我有一个在该表中使用LEFT JOIN的查询,创建了空值

的可能性

LINQ

(from a in dbContext.TableA
join b in dbContext.TableB on a.IdB equals b.IdB into bLeft
from bTbl in bLeft.DefaultIfEmpty()
select new
{
    IdBTemp = bTbl.IdB, // This value may be null
    IdATemp = a.IdA
}.AsEnumerable().Select(row => new DynamicClassModel()
{
    // Stuff here (convertion to string, concatanations and other stuff)
});

* 班级模型*

[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
[Column("IdB")]
public long IdB { get; set; }

这只是一个小的查询示例。我的查询大于此,并且有更多左连接,还有更多字段未映射为空,但在此查询中它们可能为空。


我正在阅读有关LET的内容,同时尝试使用某些值填充空值(如0)。

如何将空值传递给非null的属性?

2 个答案:

答案 0 :(得分:3)

您可以尝试使用默认值0填充它:

(from a in dbContext.TableA
join b in dbContext.TableB on a.IdB equals b.IdB into bLeft
from bTbl in bLeft.DefaultIfEmpty()
select new
{
    IdBTemp = bTbl == null ? 0 : bTbl.IdB,
    IdATemp = a.IdA
}.AsEnumerable().Select(row => new DynamicClassModel()
{
    // Stuff here (convertion to string, concatanations and other stuff)
});

但也许您想要使用int?代替。在这种情况下使用:

(from a in dbContext.TableA
join b in dbContext.TableB on a.IdB equals b.IdB into bLeft
from bTbl in bLeft.DefaultIfEmpty()
select new
{
    IdBTemp = bTbl == null ? (int?)null : bTbl.IdB,
    IdATemp = a.IdA
}.AsEnumerable().Select(row => new DynamicClassModel()
{
    // Stuff here (convertion to string, concatanations and other stuff)
});

答案 1 :(得分:2)

尝试按照您的意愿指定默认值:bLeft.DefaultIfEmpty(0)bLeft.DefaultIfEmpty(-1)