linq to entityの文字列の比較
1790 ワード
これをやったばかりです。文字列の比較に問題があります。linq to entityはsql文のような2つの文字列の比較はサポートされていません。
例えばsql:select*from aaa where a.name''A 001'and a.name''B 001'
この場合はどう処理しますか?
linqを書く時からの考えはこのままです。
簡単な「点」によって、CompreToという拡張方法があることが分かりました。彼の定義を見てみます。
public int CompreTo(string streB) System.Stringのメンバー
要約:この例を指定されたSystem.Stringオブジェクトと比較し、この例は順序指定されたSystem.Stringの前にあるか、後に同じ位置にあるかを示す。
パラメータ:str B:System.String。
戻り値:32ビットは、順序でvalueパラメータの前にあるか、後に同じ位置にあるかを示すシンボル整数を有する。この例は、ゼロ以下の値条件である。ゼロのこの例は、順序付け順序における位置は、strと同じである。この例がゼロより大きいのは、strの後にある。または-strはnullです。
これがあればずっと楽です。
上の言葉を改造します。
return edm.XT_Card.Count(s=>s.cardNum.cmapareto(startCode)==0&s.C.radNum.compreto(endCode)<=0);
このようにsqlの中の大きさに達しました。及び使用するbetween…andの効果
例えばsql:select*from aaa where a.name''A 001'and a.name''B 001'
この場合はどう処理しますか?
linqを書く時からの考えはこのままです。
using
(XTDBEntities edm
=
new
XTDBEntities())
{
return
edm.XT_Card.Where(s
=>
s.CardNum
>=
startCode
&&
s.CardNum
<=
endCode).Count();
}
しかし、聡明なあなたはこのコンパイルが通らないことを発見します。どうすればいいですか簡単な「点」によって、CompreToという拡張方法があることが分かりました。彼の定義を見てみます。
public int CompreTo(string streB) System.Stringのメンバー
要約:この例を指定されたSystem.Stringオブジェクトと比較し、この例は順序指定されたSystem.Stringの前にあるか、後に同じ位置にあるかを示す。
パラメータ:str B:System.String。
戻り値:32ビットは、順序でvalueパラメータの前にあるか、後に同じ位置にあるかを示すシンボル整数を有する。この例は、ゼロ以下の値条件である。ゼロのこの例は、順序付け順序における位置は、strと同じである。この例がゼロより大きいのは、strの後にある。または-strはnullです。
これがあればずっと楽です。
上の言葉を改造します。
return edm.XT_Card.Count(s=>s.cardNum.cmapareto(startCode)==0&s.C.radNum.compreto(endCode)<=0);
このようにsqlの中の大きさに達しました。及び使用するbetween…andの効果