使用 (Db)LINQ 进行交叉表/对象更新

发布于 2024-09-29 19:16:33 字数 1487 浏览 2 评论 0原文

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

但是如何使用 DBLinq 和 c# 中的列表更新 table1?

I wonder if someone can help me translate a MySQL query to
a (Db)LINQ statement.

I’ve made a test case for what I want to do, so data and structure are
different than what I really want to do, but it’s just meant to get it
working.

In a MySQL database I have this table:

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 

This is the content

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

I use DBLinq within C# to connect to this table.
In the C# program, I also have a list like this:

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

With

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

Content of the list is:

number  name     
10      firstName   
20      secondName   
30      ThirdName   

If the content of the list would be a table in mysql (table2), I could
just update table1 with this query:

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

(in real life I actually have to match two columns to be a key)

The result will be

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

But how can I update table1, using DBLinq and the List within c#?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

去了角落 2024-10-06 19:16:33

解决问题是这样的:

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

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

Solved the problem like this:

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

If someone knows a better solutions, please let me know.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文