1

(私は Entity Framework を初めて使用するので、これが簡単な質問である場合は申し訳ありません!)

私の DB テーブルには、[SiteURL] というタイトルの列と別の [キーワード] というタイトルの列があります。

そこにはレコードがありますが、キーワード フィールドにエントリがないレコードもあります。ユーザーがこれら 2 つの列に基づいてレコードをフィルターできるようにしたいと考えています。

私のコードはここにあります:

Publishers = db.Publishers.Where(p =>
                      p.isActive == true
                  && p.SiteURL.ToLower().Contains(((txtFilterBy_SiteURL.Value.Length > 0) && (txtFilterBy_SiteURL.Value.ToLower() == "site url")) ? p.SiteURL.ToLower() : txtFilterBy_SiteURL.Value.ToLower())
                  && p.Keywords.ToLower().Contains(((txtFilterBy_KeyWord.Value.Length > 0) && (txtFilterBy_KeyWord.Value.ToLower() == "keyword")) ? p.Keywords.ToLower() : txtFilterBy_KeyWord.Value.ToLower())
                    ).ToList();

私は言おうとしています:

IF txtFilterBy_SiteURL.Value が空ではなく、「サイト URL」と等しくない場合、[SiteURL] で txtFilterBy_SiteURL.Value に入力されたものを検索します。

IF txtFilterBy_KeyWord.Value が空ではなく、"keyword" と等しくない場合、txtFilterBy_KeyWord.Value に入力されたものの条件リストに [キーワード] を含めます。

  ID  |  SiteURL  | Keywords  |
   1  |  Rod.org  | Travel    |
   2  |  jane.com |           |
   3  |  fred.com | motoring  |

したがって、ユーザーが「.com」を txtFilterBy_SiteURL に入力した場合、私は戻りたい

  ID  |  SiteURL  | Keywords  |
   2  |  jane.com |           |
   3  |  fred.com | motoring  |

ユーザーが「.com」を txtFilterBy_SiteURL に入力し、「mot」を txtFilterBy_KeyWord テキストボックスに入力すると、次のようになります。

  ID  |  SiteURL  | Keywords  |
   3  |  fred.com | motoring  |
4

3 に答える 3

0
Publishers = db.Publishers.Where(p =>
             p.Keywords.ToLower().Contains(p.Keywords.ToLower()) || String.IsNullOrEmpty(p.Keywords))
             ).ToList();

KeyWords が文字列の場合。

于 2013-05-07T14:09:59.657 に答える
0

この行は、null でないキーワードに対して常に true になります。p.Keywords.ToLower().Contains(p.Keywords.ToLower())

nullKeywords プロパティにアクセスする前にチェックをフィルタリングしてからチェックする必要がある場合contains

Publishers = db.Publishers.Where(p => String.IsNullOrEmpty(p.Keywords) &&
             p.Keywords.ToLower().Contains("stringToSearch")
             ).ToList();

編集

// get all data
Publishers = db.Publishers.ToList();

// filter by site url 
if(!String.IsNullOrEmpty(txtFilterBy_SiteURL.Text))
{
    Publishers = Publishers.Where(p => String.IsNullOrEmpty(p.SiteURL) &&
                 p.SiteURL.ToLower().Contains(txtFilterBy_SiteURL.Text)
                 ).ToList();
}
// filter by keyword 
if(!String.IsNullOrEmpty(txtFilterBy_KeyWord.Text))
{
    Publishers = Publishers.Where(p => String.IsNullOrEmpty(p.Keywords) &&
                 p.Keywords.ToLower().Contains(txtFilterBy_KeyWord.Text)
                 ).ToList();
}
于 2013-05-07T14:14:51.943 に答える