0

名前エントリが重複している場合、コードは重複した名前をカウントし、次のように名前の横にカウント番号を追加します

データベースに「Andy」という名前が既にある場合、次の Andy は「Andy 1」として追加されます。

しかし問題は、別の「Andy」をデータベースに追加すると、「Andy」が見つかったときに重複がないかチェックされ、「Andy 1」になりますが、再び「Andy 1」が見つかるため、最後に「Andy 1 1」として保存されるためです。 「Andy 1」、「Andy 2」、「Andy 3」で保存する方法がわかりません

private void button0_Click(object sender, EventArgs e)
    {
        using (DBDataContext DB = new DBDataContext(strConnectionString))
        {
            Table newTable = new Table
            {
                Name = txtName.Text.ToString(),
                Add = txtAdd.Text.ToString(),
            };

            var a = from b in DB.GetTable<Table>() select b;

            foreach (var x in a)
            {
                if (x.Name == txtName.Text.ToString())
                {
                    txtCOUNT.Text = a.Count(b => b.Name == txtName.Text).ToString();

                    MessageBox.Show("This Name is already Exists");

                    Check = txtName.Text + " " + txtCOUNT.Text;

                    txtName.Text = Check;

                    txtAdd.Text = " ";

                    id = x.Id;
                }
            }

            if (txtName.Text != "" && txtAdd.Text != "")
            {
                DB.NTable.InsertOnSubmit(newTable);

                DB.SubmitChanges();

                MessageBox.Show("Name Added Successfully.", "Done!", MessageBoxButton.OK);

                NavigationService.GoBack();
            }
            else
            {
                MessageBox.Show("Some essential details must be entered. Name, Add.", "Details Missing!", MessageBoxButton.OK);
            }
        }
    }

私はカウントのように文字列 StartsWith を使用しようとしています

string Check = txtName.Text;

txtCOUNT.Text = a.Count (b => b.Name == Check.StartsWith(b.Name)).ToString();

しかし、それは私にエラーを与えません 助けてください

4

2 に答える 2

1

最初に注意すべきことは、次のことです。

var a = from b in DB.GetTable<Table>() select b;

foreach (var x in a)
{

(dbクエリに影響を与える代わりに)すべての行をロードするため、行が多い場合はコストがかかる可能性があります。

これは、あなたが望むことをすると思うLinqクエリです(名前にtxtName.Textテキストのみが含まれている場合に機能します):

using (DBDataContext DB = new DBDataContext(strConnectionString))
{
            string name = txtName.Text.ToString(),
            int nbDuplicate = (from b in DB.GetTable<Table>()
                    where b.Name==name ||  b.Name.StartsWith(name+" ") 
                       && (b.Name.Length>=name.Length+2 && 
                    b.Name[name.Length+1]>='0'
                    && b.Name[name.Length+1]<='9'
                      )
                    select b).Count();
            name +=  " " + nbDuplicate;
              .....
}
于 2013-09-14T19:26:35.073 に答える
0

これがあなたのクエリです

var countNumber = (from c in svcContext.ContactSet
                     where c.FirstName.StartsWith("Andy")
                     select new
                     {
                      c.FirstName,
                      c.LastName
                     }).Count();

そして、これは観察可能なコレクションセットを返すので、明らかにカウントを呼び出して要素の数を取得します。Linq to Sql での Count は、カウントの Linq クエリがないだけのように実現されます。

MSDN リンクを確認する

Linq でカウント

于 2013-09-14T19:55:24.247 に答える