Обновление кросс-таблицы / объекта с помощью (Db) LINQ - PullRequest
1 голос
/ 30 октября 2010

Интересно, может ли кто-нибудь помочь мне перевести запрос MySQL на (Db) оператор LINQ.

Я сделал тестовый пример того, что я хочу сделать, поэтому данные и структура отличается от того, что я действительно хочу сделать, но это просто значит получить его рабочий.

В базе данных MySQL у меня есть эта таблица:

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 

Это содержание

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

Я использую DBLinq в C # для подключения к этой таблице. В программе на C # у меня также есть такой список:

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

С

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

Содержание списка:

number  name     
10      firstName   
20      secondName   
30      ThirdName   

Если бы содержимое списка было бы таблицей в mysql (table2), я мог бы просто обновите table1 с этим запросом:

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

(в действительности мне нужно сопоставить два столбца, чтобы быть ключом)

Результат будет

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

Но как я могу обновить table1, используя DBLinq и List в c #?

1 Ответ

0 голосов
/ 01 ноября 2010

Решил проблему следующим образом:

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();

Если кто-то знает лучшие решения, пожалуйста, дайте мне знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...