c# - 为每个循环创建 XName.Get In

标签 c# asp.net xml linq visual-studio-2010

我有一个 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 值?

非常感谢您的帮助!

最佳答案

您正在尝试检查 settingList 中的字符串 Any() 是否为空:

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

存在从stringXName的隐式转换,因此您实际上不需要调用XName.Get
不过,如果你愿意,你可以编写 el.Element(XName.Get(name))

关于c# - 为每个循环创建 XName.Get In,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6694378/

相关文章:

c# - LiveCharts WPF 中单独着色的数据点

c# - 怎么获取asp :RadioButton with jQuery?的勾选值

c# - 在 ASP.NET 回发期间如何安全地保留密码字段的值?

具有 Entity Framework 的 SQL Server xml 列 - 如何保留无关紧要的空格

java - 如何解决 android Admob 中的无广告配置问题?

c# - 在 C# 中将 SqlDataReader 列值转换为 json 字符串

c# - 哪种方法重载可以从 VBScript 访问?

c# - 将 Gridview 与项目 asp.net 绑定(bind)

c# - RowUpdating GridView 显示旧值

xml - 无法将 .doc 另存为 .xml