2016-04-12 7 views
1

Linqクエリに一致するレコードを表示するASP MVCにactionresultを作成しました。私が追加されるまで、それは正常に働いていた:のような演算子はゼロの結果を返します

records.State == '0' && 

(T-SQLで)このクエリではなく、LINQのと、SQL管理スタジオで正しい結果を返します。

public ActionResult Index(string q) 
    { 
       viewModel.Records = from records in db.records 
            where records.State == '0' && 
            records.Title.Contains(q) 
            || records.Title.Contains(q) 
            ||records.Project.Contains(q) 
            || records.Owner.Contains(q) 
            || records.Number.Contains(q) 
            select events; 
    } 
+2

State' 'のタイプが何でありますか? – Shyju

+0

@Shyjuタイプは@CitizenDBは、なぜあなたは 'char'にそれを比較している –

+1

tinyint型ですか? 'records.State == 0'を試してください。 '0'と比較すると、実際には数値48と比較されます – juharr

答えて

5

うあなたのロジックをどのように置くかを注意してください。何がしたいことは

records.State == '0' && [whatever previous logic you have] 

されている場合は、括弧内のすべての以前のロジック置く必要があります:あなたは、重複する条件records.Title.Contains(q)を持っていることに注意し、また

viewModel.Records = from records in db.records 
        where records.State == '0' && 
        (records.Title.Contains(q) 
        || records.Project.Contains(q) 
        || records.Owner.Contains(q) 
        || records.Number.Contains(q)) 
        select events; 

を、私は私の解決策でそれを削除します。また

、あなたのrecords.Stateが数値型(のようなint、ないchar/string)のであれば、あなたはアポストロフィを使用するべきではありませんが、直接番号を使用する必要があります。

viewModel.Records = from records in db.records 
        where records.State == 0 && 
        (records.Title.Contains(q) 
        || records.Project.Contains(q) 
        || records.Owner.Contains(q) 
        || records.Number.Contains(q)) 
        select events; 
2

以下試してみてください
public ActionResult Index(string q) 
{ 
      viewModel.Records = from records in db.records 
           where records.State == 0 && 
           (records.Title.Contains(q) 
           || records.Title.Contains(q) 
           ||records.Project.Contains(q) 
           || records.Owner.Contains(q) 
           || records.Number.Contains(q)) 
           select events; 
} 
ので Stateプロパティの型が char型である場合はあなたのコードは、 に動作します
2

10はStateがタイプint/tinyint(バイト)である場合、あなたはこの

where records.State == 0 
&& records.Title.Contains(q) 
2

あなたContains()呼び出しが正しい見て(あなたが二回Title.Contains()を持っているが)しかし、あなたはあなたのStateプロパティことを言及を行う必要がありますchar

です(以前にあったように文字列の代わりに)あなたがそのように比較することになるでしょうので、tinyint次のとおりです。

public ActionResult Index(string q) 
{ 
      viewModel.Records = from records in db.records 
           where records.State == 0 && (records.Title.Contains(q) 
           ||records.Project.Contains(q) 
           || records.Owner.Contains(q) 
           || records.Number.Contains(q)) 
           select events; 
} 
関連する問題