2011-07-14 8 views
2

私はLINQステートメントを持っています。 XMLファイルを検索します。 (下記の例を参照してください)情報が必要な特定のノードがあります。 (空ではない)LINQ文は、ノードが空であるトランザクションを返します。これは、これらが必要なためです。各ループのXName.Getの作成

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()が空であるかどうかを確認しようとしている

答えて

1

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

ありstringからXNameへの暗黙的な変換があるので、あなたが実際にXName.Getを呼び出す必要はありません。
でも、あなたは書くことができますel.Element(XName.Get(name))

+0

私は現在のLINQステートメントでこれをどこに追加しますか?私はあなたが提供したコードをどのように受け取り、それを私の中に入れるのか混乱しています...ありがとう。 – Turp

+0

おそらくあなたの 'where'節にあります。ここ – SLaks

+0

は私のwhere句ですが、私はエラーを取得:。 'transactions.Elements()どれ ( エル=> settingList.Any(名=> String.IsNullOrEmpty(el.Element(名).Valueの)) ) ' エラー\tための最良のオーバーロードされたメソッドの試合 'System.Xml.Linq.XContainer.Element(System.Xml.Linq.XName)' は、いくつかの無効な引数 – Turp