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)
{

它将加载每一行(而不是影响数据库查询),如果有很多行,这可能会很昂贵。

这是一个 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();

并且由于这会返回一个可观察的集合集,因此我们显然会调用 count 来获取元素的数量。Linq to Sql 中的计数是这样实现的,只有没有 Linq 查询计数。

检查 Msdn 链接

在 Linq 中计数

于 2013-09-14T19:55:24.247 回答