1

我想知道是否有人可以帮助我将 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   

我在 C# 中使用 DBLinq 连接到该表。在 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   

但是如何在 c# 中使用 DBLinq 和 List 更新 table1?

4

1 回答 1

0

解决了这样的问题:

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

如果有人知道更好的解决方案,请告诉我。

于 2010-11-01T10:10:48.680 回答