aggiornamento tabella / oggetto croce con (Db) LINQ
Domanda
Mi chiedo se qualcuno può aiutarmi a tradurre una query MySQL per un (Db) dichiarazione LINQ.
Ho fatto un banco di prova per quello che voglio fare, quindi i dati e la struttura sono diverso rispetto a quello che voglio fare, ma è solo scopo di farlo di lavoro.
In un database MySQL Ho questa tabella:
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
Questo è il contenuto
id number name
1 10 aaa
2 20 bbb
3 25 cccc
4 30 ddd
5 35 eee
Io uso DBLinq all'interno di C # per collegarsi a questo tavolo. Nel programma C #, ho anche una lista come questa:
List<myDataFields> myNewData = new List<myDataFields>();
Con
public class myDataFields
{
public int number { get; set; }
public string name { get; set; }
}
Il contenuto della lista è:
number name
10 firstName
20 secondName
30 ThirdName
Se il contenuto della lista sarebbe una tabella in MySQL (Tabella 2), ho potuto basta table1 aggiornamento con questa domanda:
update mytable1,mytable2 set mytable1.name=mytable2.name where
mytable1.number=mytable2.number;
(nella vita reale io in realtà deve corrispondere due colonne per essere una chiave)
Il risultato sarà
id number name
1 10 firstName
2 20 secondName
3 25 cccc
4 30 ThirdName
5 35 eee
Ma come posso aggiornare table1, utilizzando DBLinq e l'elenco all'interno di C #?
Soluzione
Risolto il problema in questo modo:
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();
Se qualcuno conosce un soluzioni migliori, per favore fatemelo sapere.