我有一个 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)
)
存在从string
到XName
的隐式转换,因此您实际上不需要调用XName.Get
。
不过,如果你愿意,你可以编写 el.Element(XName.Get(name))
关于c# - 为每个循环创建 XName.Get In,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6694378/