2010-10-29 7 views
1

Je me demande si quelqu'un peut m'aider à traduire une requête MySQL en une instruction (Db) LINQ.Table croisée/mise à jour d'objet avec (Db) LINQ

J'ai fait un cas de test pour ce que je veux faire, donc les données et la structure sont différent de ce que je veux vraiment faire, mais c'est juste destiné à l'obtenir de travail.

Dans une base de données MySQL Je possède ce tableau:

CREATE TABLE `mytable1` 
( 
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `number` int(11) NOT NULL, 
    `name` varchar(20) COLLATE latin1_general_ci NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci 

Ceci est le contenu

id  number name 
1  10  aaa 
2  20  bbb 
3  25  cccc 
4  30  ddd 
5  35  eee 

J'utilise DBLinq au sein de C# pour se connecter à ce tableau. Dans le programme C#, j'ai aussi une liste comme ceci:

List<myDataFields> myNewData = new List<myDataFields>(); 

Avec

public class myDataFields 
{ 
    public int number { get; set; } 
    public string name { get; set; } 
} 

Contenu de la liste est la suivante:

number name  
10  firstName 
20  secondName 
30  ThirdName 

Si le contenu de la liste serait une table dans mysql (table2), je pourrais juste mettre à jour table1 avec cette requête:

update mytable1,mytable2 set mytable1.name=mytable2.name where 
mytable1.number=mytable2.number; 

(dans la vraie vie, j'ai fait faire correspondre deux colonnes comme une clé)

Le résultat sera

id  number name 
1  10  firstName 
2  20  secondName 
3  25  cccc 
4  30  ThirdName 
5  35  eee 

Mais comment puis-je mettre à jour table1, en utilisant DBLinq et la liste dans les C#?

Répondre

0

résolu le problème comme celui-ci:

List<myDataFields> myDFList = new List<myDataFields>(); 
myDFList.Add(new myDataFields { name= "name123", number= 20 }); 
myDFList.Add(new myDataFields { name = "name456", number = 35 }); 

int[] getNumbers = (from numbers in myDFList select numbers.number).ToArray(); 

var dataInDb = from x in _db.mytable1 where getNumbers.Contains(x.Number) select x; 

foreach (var row in dataInDb) 
{ 
    row.Name = (from mdf in myDFList where mdf.number == row.Number select mdf.name).First(); 
} 

_db.SubmitChanges(); 

Si quelqu'un connaît une meilleure solution, s'il vous plaît laissez-moi savoir.

Questions connexes