复杂对象的Linq查询
每个人-我有以下一组对象:复杂对象的Linq查询,linq,linq-to-sql,Linq,Linq To Sql,每个人-我有以下一组对象: User{String:Name,List} 设备{String:Name,DeviceVariationInfo} DeviceVariationInfo{String:OS} 在数据库中,这些对象被拆分为以下表: 用户、设备、DeviceVariationsInfo、UserToDevices 我试图查询某个用户的设备列表及其变化信息,并使用以下查询,它总是在设备中返回0个项目的列表。我很确定我在这里做错了什么……) 几点注意: 用户是一个类吗?如果是这样,为什么
User{String:Name,List}
设备{String:Name,DeviceVariationInfo}
DeviceVariationInfo{String:OS}
在数据库中,这些对象被拆分为以下表:
用户、设备、DeviceVariationsInfo、UserToDevices
我试图查询某个用户的设备列表及其变化信息,并使用以下查询,它总是在
设备中返回0个项目的列表。我很确定我在这里做错了什么……)
几点注意:
用户是一个类吗?如果是这样,为什么要通过ref
将其传递到GetUserDevices?除非你想改变引用的含义,否则不要这样做
还有,你为什么要这么做<代码>用户蝗虫=用户代码>
下面是我调试您的问题的方法:删除部分查询,直到返回数据。例如,删除最后一条join语句,重新运行查询,看看哪里出了问题。“我正在尝试查询丢失的设备及其变体信息”——这意味着什么?另外,请注意DeviceQuery永远不会返回null。查询可能返回零结果,但查询对象本身永远不会为空。感谢您的回复,Juda。是的,‘User’是一个类。我通过ref传递它的原因是因为我填充了该用户对象的设备列表。我之所以将其分配给局部变量,是因为ref变量不能在查询中使用。如果您只是填写user.Devices,则不必通过ref传入。因为它是一个类,所以会自动通过ref传入;修改它将修改您传入的内容。您是否尝试删除一些连接以找出查询出错的地方?将其保留为ref参数有什么缺点?删除ref的原因与图形不应有多余的线和机器不应有多余的零件的原因相同。
private void GetUserDevices(ref User user)
{
User locUSer = user;
if (user != null)
{
var deviesQuery = from dts in _dataConext.DB_UserToDevices
where dts.UserId == locUSer.Id
join ds in _dataConext.DB_Devices on dts.DeviceID equals ds.Id
join dsv in _dataConext.DB_DeviceVariations on ds.Id equals dsv.DeviceId
select new Device
{
Version = ds.Version,
VariationInfo = new DeviceVariation
{
OSVersion = dsv.OS
},
Name = ds.FriendlyName,
Id = ds.Id
};
if (deviesQuery != null)
user.Devices = deviesQuery.ToList();
}
}