Cem*_*mre 3 c# linq debugging visual-studio-2013
我正在处理一个复杂的linq查询,如下所示,它System.NullReferenceException在运行时引发。不幸的是,visual studio 不提供任何其他信息,我无法QuickWatch对这些值进行检查以查看哪个为空。有没有办法调试这种查询,以便我可以看到有什么问题?
var dataSource = (from c in session.Query<PortChannel>()
select
new PortChannelData
{
Location = c.Port.MagazineSlot.SiteMagazine.Site.SiteName,
MagazineName =
String.Format("{0}-{1}", c.Port.MagazineSlot.SiteMagazine.MagazineType.MagazineName,
c.Port.MagazineSlot.SiteMagazine.MagazineNo),
SlotNo = c.Port.MagazineSlot.SlotNo,
PortNo = c.Port.PortNo,
Klm = c.Klm,
StmNo = c.StmNo,
Label = c.SiteName == null ? null : String.Format("{0}_{1}", c.SiteName, c.E1No),
ChannelFullName = c.ChannelFullName,
BscRncPort = c.BscRncPort,
MgwPort = c.MgwPort,
ReservedBy = c.ReservedBy,
CrossFullName = c.CrossConnection == null ? null : c.CrossConnection.ChannelFullName
}).ToList();
}
Run Code Online (Sandbox Code Playgroud)
在您的查询中,您可以使用let关键字来存储子表达式的结果。然后在创建新PortChannelData对象时分配结果。
var dataSource =
(from c in session.Query<PortChannel>()
let flName = c.CrossConnection == null ? null : c.CrossConnection.ChannelFullName
let magName = String.Format("{0}-{1}", c.Port.MagazineSlot.SiteMagazine.MagazineType.MagazineName,
c.Port.MagazineSlot.SiteMagazine.MagazineNo)
// and so on
select new PortChannelData
{
MagazineName = magName,
CrossFullName = flName,
// ...
}).ToList();
Run Code Online (Sandbox Code Playgroud)
这样,当您调试并进入查询(F11是标准的 Visual Studio 快捷方式)时,您将看到每个子表达式的结果。
| 归档时间: |
|
| 查看次数: |
416 次 |
| 最近记录: |