まず、この質問に対する答えを探しましたが、使用している機能が何と呼ばれているのかわからないため、何も見つかりませんでした。
以下のコードのDBEntitiesは、OracleDB接続用にdevartによって生成されました。
最初の例が機能し、2番目の例ではSystem.NullReferenceExceptionしか表示されないのはなぜですか?
有効なコード:
using (DBEntities context = new DBEntities())
{
var infos = (from info in context.Infos
where info.Index == index
orderby info.Name
select new
{
Name = info.Name,
MRN = info.MRN,
UnitNumber = (info.UnitNum == null) ? -1 : (decimal)info.UnitNum,
UnitName = (info.UnitName == null) ? String.Empty : info.UnitName
}).Distinct();
foreach (var info in infos)
{
// *do stuff*
}
}
例外を与えるコード(例外はforeachに到達した場合にのみ表示されます):
using (DBEntities context = new DBEntities())
{
var infos = (from info in context.Infos
where info.Index == index
orderby info.Name
select new Member()
{
Name = info.Name,
MRN = info.MRN,
CurrentUnit = new Unit()
{
UnitNumber = (info.UnitNum == null) ? -1 : (decimal)info.UnitNum,
UnitName = (info.UnitName == null) ? String.Empty : info.UnitName
}
}).Distinct();
foreach (Member info in infos)
{
// *do stuff*
}
}
編集: これも同様に機能することを追加したいと思います:
using (DBEntities context = new DBEntities())
{
var infos = (from info in context.Infos
where info.Index == index
orderby info.Name
select new Member()
{
Name = info.Name,
MRN = info.MRN
}).Distinct();
foreach (Member info in infos) //Exception is thrown here.
{
// *do stuff*
}
}