3

我有一个为空的属性(它是一个 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)填充空值。

如何将空值传递给不为空的属性?

4

2 回答 2

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)
});

但也许你想用 aint?代替。在这种情况下使用这个:

(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)
});
于 2013-08-01T12:50:10.123 回答
2

尝试根据需要指定默认值:bLeft.DefaultIfEmpty(0)bLeft.DefaultIfEmpty(-1)

于 2013-08-01T12:52:17.147 回答