1

検索用語について、xml ファイル内の 2 つの属性を照会しようとしています。

私はこれを持っています:

<?xml version="1.0" encoding="utf-8" ?>
<Products>
  <item ProductName="Golf Shirt" Content="This is a nice breathable shirt for golf." />
  <item ProductName="Bowling Ball" Content="This is a colorful 8-lbs ball." />
  <item ProdcutName="Tee Shirt" Content="100% cotton tee-shirt." />
</Products>

検索用語の ProductName 属性値と Content 属性値の両方を照会したいと考えています。

これが私のクエリ式です:

var results = from node in _xDoc.Descendants("Item")
    where node.Attribute("Content").Value.Contains(searchTerm)
    where node.Attribute("ProductName").Value.Contains(searchTerm)
    select new SearchModel()
    {
    Name = node.Attribute("ProductName").Value,
    Url = "the url",
    Group = "Products"
    };

検索用語が「シャツ」の場合、「ゴルフ シャツ」と「T シャツ」が返されるはずですが、何も見つかりません。二重の「where」句がand「and」式を作成しているためだと思いますが、「or」式が必要です。「where」句の1つを削除すると、機能します。

「||」を入れてみた 最初の「where」句の後ですが、エラーが発生します。

Linq-to-Xml の "or where" 句を実装するにはどうすればよいですか?

ありがとう。

4

2 に答える 2

0

私はそれを考え出した。これが私の修正です。

var results = _xDoc.Descendants("Item")
    .Where(c => 
        (
            c.Attribute("ProductName").Value.ToLower().Contains(searchTerm.ToLower()) ||
            c.Attribute("Content").Value.ToLower().Contains(searchTerm.ToLower())
        )
     )
    .Select(c => new SearchModel()
         {
             Name = c.Attribute("ProductName").Value,
             Url = "the url",
             Group = "Products"
         });
于 2012-06-07T23:03:32.903 に答える
0

次のようなことを試しましたか?

where ((string)node.Attribute("Content")).Contains(searchTerm) || ((string)node.Attribute("ProductName")).Contains(searchTerm)

于 2012-06-07T22:48:42.927 に答える