如何强制查询检索嵌套元素数据?

时间:2015-09-30 09:51:19

标签: c# json linq serialization linq-to-sql

我正在使用JSON从我的数据库中创建LINQ to SQL。我设置了Serialization Mode Unidirectional(所以我可以序列化数据),一旦我查询了我的对象(User),我将其转换为JSON

[WebMethod]
public User GetUserByID(int ID)
{
    User user = db.User.Where(p => p.ID == ID).FirstOrDefault();
    var json = JsonConvert.SerializeObject(user, new IsoDateTimeConverter());
    return user;
}

问题在于,在生成的JSON上,嵌套的数据/对象(即我对该对象与其他对象/表的关系)是null

因此,例如,如果我为该用户提供3个电话号码(1-n关系),而不是使用这些(3)数字检索JSON数组,则会显示:

"Phones": null,

如何“强制”User查询其中的所有数据/关系?

如果我在序列化之前执行此查询(例如):

var phones = m_oAlumno.Telefono.ToList();

它说“检测到'用户'类型的自引用循环。”

1 个答案:

答案 0 :(得分:0)

在LINQ to SQL中,您可以使用DataLoadOptions加载引用的实体。

var loadOptions = new DataLoadOptions();
loadOptions.LoadWith<User>(u => u.PhoneNumber);
db.LoadOptions = loadOptions;

其中PhoneNumber是引用User的实体,并假设 db 是您的linq数据上下文。