Создание XName.Get In для каждого цикла - PullRequest
2 голосов
/ 14 июля 2011

У меня есть заявление LINQ. Он ищет файл XML. (См. Пример ниже). Есть определенные узлы, которые должны содержать информацию в них. (Не пустой) Оператор LINQ возвращает транзакции с пустыми узлами, поскольку они обязательны.

Пример файла XML:

<OnlineBanking>
  <Transactions>
    <Txn>
      <UserName>John Smith</UserName>
      <CustomerStreet>123 Main</CustomerStreet>
      <CustomerStreet2></CustomerStreet2>
      <CustomerCity>New York</CustomerCity>
      <CustomerState>NY</CustomerState>
      <CustomerZip>12345</CustomerZip>
    </Txn>
  </Transactions>
</OnlineBanking>

LINQ Заявление:

//Start LINQ statement
var transactionList =
    from transactions in root.Elements(XName.Get("Transactions")).Elements().AsEnumerable()
    where transactions.Elements().Any
       (
          el =>
          String.IsNullOrEmpty(el.Value) &&
          elementsThatCannotBeEmpty.Contains(el.Name)
       )
    select transactions;

Мой вопрос:

У меня есть обязательные поля (т. Е. CustomerStreet, CustomerCity и т. Д.) В таблице базы данных. Ниже я жестко закодировал необходимые XName. Однако я хочу, чтобы это было динамическим из базы данных.

var elementsThatCannotBeEmpty = new HashSet<XName>
{
   XName.Get("CustomerStreet"),
   XName.Get("CustomerCity"),
   XName.Get("CustomerState"),
   XName.Get("CustomerZip")
};

Вот как я получаю поля, которые требуются из базы данных:

List<Setting> settingList = SettingsGateway.SelectBySettingType("VerifyField");
foreach (Setting SettingValue in settingList)
{
    string strSettingType = setting.SettingType;
}

Как взять цикл результатов моей базы данных и динамически добавить значения XName.Get?

Большое вам спасибо за помощь!

1 Ответ

1 голос
/ 14 июля 2011

Вы пытаетесь проверить, являются ли Any() из строк в settingList пустыми:

if (settingList.Any(
        name => String.IsNullOrEmpty(el.Element(name).Value)
    )

Существует неявное преобразование из string в XName, поэтому вы нена самом деле нужно позвонить XName.Get.
Если вы хотите, вы можете написать el.Element(XName.Get(name))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...