1

文字列に対して複数のフォーマットを実行するにはどうすればよいですか?

たとえば、次のように実行しても機能しません。

var Id = (from p in db.vwIds.Where(p => p.OperationalNumber.Substring(p.OperationalNumber.IndexOf("-") + 1).TrimStart('0')  == id)
                              group p by p.ID into g
                              select g.Key).ToList();

文字列に対して複数のアクションを実行することはできませんか?

動作しないとは、「vwIds」からIDを取得しないことを意味します。idの値を「001」にハードコーディングして「.TrimStart( '0')」を削除すると、IDが取得されます。それ以外の場合は取得されません。

基本的に、私が渡すIDは、先行ゼロのない数値です。たとえば、「1」、「2」、「112」などです。vwIdに存在するIDの形式は、「JEE-001」、「Dee-002」などです。

4

2 に答える 2

1

idの値を「001」にハードコーディングすると

「001」にハードコーディングidしている場合、それは、それを呼び出したIDと同じになることはありません.TrimStart('0')。しばらくの間、p.OperationalNumber.IndexOf("-") + 1)「001」と評価されると仮定しましょう。「trimstart」を呼び出すと「1」になります。「1」は「001」と等しくないため、含まれていません。

私の推測では、IDも呼び出す必要があります。.TrimStart('0')さらに良いのは、両方の文字列を数値に解析してから、文字列値ではなく数値を比較することです。

于 2012-09-24T21:14:31.207 に答える
0

複数のwhere句を使用して必要なものを取得できます。これを試してみましたが、完全に機能します。

        var id = db.vwIds.Where(p => p.OperationalNumber.Contains('-'))
            .Where(p => p.OperationalNumber.Replace(" ", "").Split('-')[1].TrimStart('0') == "23")
            .GroupBy(p => p.ID).Select(g => g.Key);

.Contains('-')あなたが正しいフォーマットを持っていることを確認します'xxx--yyyy'

Replace(" ", "")空白を削除します

もう1つは、すべてのOperationalNumbersに、トリミングや置換の必要がないintが含まれていることが確実な場合は、IDを解析して文字列と比較しない方がよいことです( ""、 "")

        var id = vwIds.Where(p => p.OperationalNumber.Contains('-'))
            .Where(p =>int.Parse(p.OperationalNumber.Split('-')[1]) == 23)
            .GroupBy(p => p.ID).Select(g => g.Key);
于 2012-09-24T22:25:40.820 に答える