Здесь есть две отдельные проблемы. Во-первых, DefaultIfEmpty
будет эффективно давать вам последовательность с нулевым DataRow
, если запрос ничего не возвращает. В этом случае произойдет сбой не тогда, когда он попытается назначить строки, а в случае предложения Where
. Затем вы также используете FirstOrDefault
, который обычно возвращает ноль, если нет подходящих записей.
Я бы лично удалил DefaultIfEmpty
вызов и поместил все значения по умолчанию в коде для genInfo
:
var generalQuery =
from contact in contacts.AsEnumerable()
where contact.Field<String>("CONTACT_TYPE").ToUpper() == "AGENT"
select new
{
AgentName = contact.Field<String>("FIRST_NAME") + " " +
contact.Field<String>("LAST_NAME"),
AgentPhoneNumber = contact.Field<String>("PHONE"),
AgentEmailAddress = contact.Field<String>("EMAIL")
};
// Like using DefaultIfEmpty(...).First()
var result = generalQuery.FirstOrDefault() ??
new { AgentName = "Default",
AgentPhoneNumber = "Default",
AgentEmailAddress = "Default" };
var genInfo = new GeneralInformationType
{
AgentName = result.AgentName,
AgentPhoneNumber = result.AgentPhoneNumber,
AgentEmailAddress = result.AgentEmailAddress
};
Очевидно, измените «По умолчанию» на все, что вы хотите. Если у вас есть более конкретные требования, пожалуйста, объясните, что вы пытаетесь сделать, и я уверен, что мы сможем их удовлетворить ...