为什么LINQ返回的其他列值超出预期?

时间:2017-11-02 08:21:54

标签: c# asp.net-mvc linq

我的目标是为单个ParentId检索ParentTypeId 我一直在寻找和尝试各种方法 但最终我的所有查询都返回ParentId而不是ParentTypeId

我的模型有这两个表:

public class Parent
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Index("ParentIdIndex", IsUnique = true)]
    public int ParentId  { get; set; }

    public string ParentName {get; set;}

    public virtual ParentType ParentType { get; set; }
}

public class ParentType 
{

    [Key, ForeignKey("Parent")]
    public int ParentTypeId { get; set; }

    public string ParentTypeName { get; set; }

    public virtual Parent Parent { get; set; }
}

此SQL查询返回正确的结果:

select 
ParentId,
ParentType_ParentTypeId
FROM [myDB].[dbo].[Parents]
Where ParentId = 5

哪一行:(ParentId = 5,ParentTypeId = 6)

但是当在c#方法中使用LINQ查询时,它返回ParentId值,
不是ParentTypeId值。

        var query = (
                    from t1 in db.Parents
                    where (t1.ParentId == ParentId)
                    select t1.ParentType.ParentTypeId
                    ).FirstOrDefault();

为什么?

1 个答案:

答案 0 :(得分:1)

您错误地创建了外键。

ParentTypeId必须是Parent表的外键。

主表格必须为ParentType

参见我的例子:

Parent上课

public class Parent
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Index("ParentIdIndex", IsUnique = true)]
    public int ParentId { get; set; }

    public string ParentName { get; set; }

    [ForeignKey("ParentType")]
    public int ParentTypeId { get; set; }

    public virtual ParentType ParentType{ get; set; }
}

ParentType

public class ParentType
{
    [Key]
    public int ParentTypeId { get; set; }

    public string ParentTypeName { get; set; }

    public virtual IEnumerable<Parent> Parents { get; set; }
}

您可以像这样轻松获取ParentTypeId

var parentItem = (
                from t1 in db.Parents
                where (t1.ParentId == 12345)
                select t1
                ).FirstOrDefault();
// parentItem.ParentTypeId