2017-03-10 1 views
0

J'ai problème avec id Char (5) comme clé primaire, où le projet a besoin de moi de faire l'id avec une combinaison du nombre et de caractère. exemple P0001, lorsque de nouvelles données sont insérées, le PK des nouvelles données est P0002 et bientôt.C# LINQ avec base de données sur serveur

Quelqu'un peut-il m'aider avec le code? Je connais la logique, mais je ne sais pas comment obtenir les données de la base de données en utilisant linq.

context = new CarRentalLinqDataContext(); 
Car car = new Car(); 
car.carName = textBox_CarName.Text; 
int year = Int32.Parse(textBox_CarYear.Text); 
car.carYear = year; 
var id = context.Cars.Max(x => car.car_id); 
id = id.Substring(id.LastIndexOf(car.car_id)); 
int i = Convert.ToInt32(id); i += 1; 
string Code = "C000" + i.ToString(); 
car.car_id = Code; context.Cars.InsertOnSubmit(car); 
context.SubmitChanges(); 
+0

Votre question n'est pas clair – A3006

+0

Afficher le code auquel vous êtes confronté Numéro LINQ –

+0

context = new CarRentalLinqDataContext(); Car car = new Car(); car.carName = textBox_CarName.Text; int year = Int32.Parse(textBox_CarYear.Text); car.carYear = year; var id = context.Cars.Max(x => car.car_id); id = id.Substring(id.LastIndexOf(car.car_id)); int i = Convert.ToInt32(id); i += 1; string Code = "C000" + i.ToString(); car.car_id = Code; context.Cars.InsertOnSubmit(car); context.SubmitChanges();

Répondre

1

On dirait que vous avez un problème lors de la création d'un nouvel ID dans la table donnée. Vous pouvez faire ce qui suit:

1: Puisque les clés primaires sont déjà connues combinaison de caractères et de nombres, vous pouvez faire le tri lexical des lignes et obtenir la valeur maximale. Voir how to select max of mixed string/int column.

2: Supprimer tous les caractères d'une chaîne. Source

string intPartInKeyString = Regex.Replace(id, "[A-Za-z]", ""); // Remove all non digits 

3: Get entier par chaîne int conversion: Source

int maxIntValueInKey = Convert.ToInt32(intPartInKeyString); 

4: Faire de nouvelles Id par des zéros de remplissage à id incremedted: Source

string newId = "P" + (++maxIntValueInKey).ToString().PadLeft(4, '0'); 
+0

est-ce comme cela? var id = context.Cars.Max (x => car.car_id); chaîne intPartInKeyString = Regex.Replace (id, "[A-Za-z]", ""); int maxIntValueInKey = Convert.ToInt32 (intPartInKeyString); chaîne newId = "C" + (++ maxIntValueInKey) .ToString(). PadLeft (3, '0'); car.car_id = newId; –

+0

Comment obtenir tous les identifiants dans la table en utilisant Linq? Je pense que c'est arrivé parce que je ne peux pas récupérer l'ID var id = context.Cars.Max (x => car.car_id); // ceci ne fonctionne pas –

+0

@WilliamHuang oui, votre premier commentaire semble avoir le bon code. Pour obtenir le maximum d'ID, qu'obtenez-vous? Si elle retourne null, alors vous pouvez faire une vérification nulle comme ceci: http://stackoverflow.com/questions/20392753/c-sharp-finding-the-maximum-value-of-a-string-with-linq –