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 #?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top