问题标签 [linq-to-dataset]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2653 浏览

linq - 将实体模型转换为数据集 - 可以这样做吗?

在这里非常沮丧......我通常可以在网上某处的.Net中找到某种复杂问题的答案,但这个答案让我望而却步。我在一个场景中,我必须将 LINQ to Entity 查询的结果转换为 DataSet,以便数据可以由现有的业务逻辑处理,但我找不到一个可行的解决方案。

我已经尝试过像 EntityCommand 生成阅读器这样的基本方法,但是这个方法不起作用,因为 DataTable.Load() thorws an excpetion(EntityCommand 生成的阅读器不支持 GetSchemaTable() )。

我还尝试了更多 [supposed] 友好的方法,例如 Entity to IDataReader(http://l2edatareaderadapter.codeplex.com/),但是这个会引发异常,文档很少,并且自 2008 年以来一直没有被触及。

我发现的另一种方法是在这里(http://blogs.msdn.com/b/alexj/archive/2007/11/27/hydrating-an-entitydatareader-into-a-datatable-part-1.aspx),但确实没有代码的工作副本;只有片段。

我很难相信首先 MS 不会提供这种开箱即用的向后兼容项目,其次,它也不会由社区创建。

如果有任何可用的商业解决方案,我也愿意研究。

谢谢!

0 投票
1 回答
321 浏览

linq-to-dataset - 在 DataTable 行中查找列

当我运行它时,我收到“运算符'&&'不能应用于'lambda表达式'和'lambda表达式'类型的操作数”错误。

最新的运行,我得到了我需要的。

问题 - 为什么第一个代码中的错误?

0 投票
1 回答
514 浏览

linq-to-dataset - 获取列值

cityStateTaxes 是一个 DataRow,为什么/如何我无法获取 FirstOrDefault() 中的列值?

谢谢,

0 投票
2 回答
101 浏览

c# - 绑定数据源但显示其他内容

我有很多地方需要将表单控件直接绑定到后备数据库。我正在使用 LINQ to DataSet 来执行此操作。

例如,我有一个 ComboBox,其中的条目由数据库查询填充。问题当然是我的所有数据都使用数字 ID,我需要进行表查询以将其转换为用户可读的选项。

通常我会加入第二个表并使用组合框 DisplayMember 指向用户可读的字符串列。这不起作用,因为在查询上使用连接或任何投影后,您(可以理解)无法将该查询转换为 DataView。

很难相信不是每个使用 DataView 的人都会遇到这个问题。有没有办法覆盖我的表单控件的行为以使它们显示其值的函数?就像如果它们的值是 v,那么它们会显示 SomeMethod(v)?

0 投票
2 回答
509 浏览

.net - LINQ to DataSet 中的 GroupBy

背景

我正在将数据从 MySQL 数据库导入 SQL-Server 数据库(用于报告和后来的 SSAS-Cube)。我想同时规范化数据。我想将重复分组Ticket_IDs到具有其他有用信息的表中的一条记录,Contact并将原始数据保留在子表中ContactDetail(与联系人的外键)。因此,中的每条记录Contact都有一个唯一的Ticket_ID.

我决定使用强类型数据集进行导入。现在我想知道检测我是否已经添加了 Ticket_ID 的最佳方法是什么。我可以在每个循环(~100000 条记录)中检查它,但我假设有更好/更快的方法。

简化的样本数据:

这应该是Contact-table

问题

LINQ/LINQ-to-DataSet 是否可以按 Ticket_ID 分组并获取每个 ContactRow 的 ContactDetailRows 列表?我知道有一个GroupBy -Extension,但我不确定如何使用以及它是否满足我的需要(保留 ContactDetail-Rows,fe 就像一个以 Ticket_ID 作为键和List(of EmailRow)作为值的字典)。

这就是我所拥有的(简化):

  • src:类型化数据集(MySQL)
  • src.email: 输入 DataTable => 到ContactDetail
  • dest: 类型化数据集(SQL-Server)
  • dest.Contact类型化数据表
  • dest.ContactDetail使用 fk 键入 DataTableContact

我更喜欢 VB.NET,因为我对 LINQ 还不太熟悉,而且 C# 中的语法完全不同。

编辑:

感谢@Magnus,我可以通过以下方式进行操作:

我将看看这是否比使用 HashSet 的迭代方法更快来检测联系人是否已经创建。

0 投票
1 回答
661 浏览

.net - 在具有不同架构的两个类型化数据表中获取不同的行

如何从 TableA 中获取不在 TableB 中的所有行,其中 TableA 的架构与 TableB 不同(它们是来自不同 dbms 的不同类型的 DataTable 类)?

在此处输入图像描述 在此处输入图像描述

我需要所有不在ascountry中的 -rows 。country_idCountryidCountry

这不起作用,因为它们具有不同的架构(src.country并且dest.Country是不同的 DataTable 类):

src并且dest是强类型数据集

注意:不一定VB.NET

我假设我需要提供IEqualityComparer第二个参数,但不知道如何。也许还有另一种(更快的)方法来识别新行。

背景

我正在将表从 MySQL 数据库导入 SQL-Server 数据库。只检查主键而不比较行的内容就足够了。尽管此示例表仅包含几行,但两个表包含约 100000 行,因此性能对同步源和目标很重要。

0 投票
1 回答
638 浏览

.net - 如何在 LINQ 中获取自引用表的“级别”?

有一个Category带有 pkidCategory和自引用外键的表fiCategory。这意味着当 fiCategory is null. 如果fiCategory链接到另一个类别,它是它的子类别。但是这个子类别也有 1-n 个子类别(fiCategory链接到它idCategory)也是有效的。

问:如何获取主类别、子类别、子类别、...等的列表。与 LINQ?

背景

我正在使用类型化的数据集来比较来自 Server1/MySQL 的数据和来自 Server2/MS SQL-Server 的数据。规范化和清理后(有几个不一致的地方)我想将新数据导入 SQL-Server。首先我必须导入主要类别,然后是子类别等等。否则,当我尝试将具有外键的行插入尚未插入的类别时,SQL-Server 将引发约束异常。

这些是表(左 MySQL 源表,右 SQL Server 目标表):

类别: MySQL 源代码 类别:SQL-Server 目标

在这里,我得到了 MySQL 中不在 SQL-Server 中的新行:

src并且dest是类型化的数据集

现在我想导入新行。通过这种方式,我得到了所有“主要类别”:

通过这种方式,我得到了所有子类别:

两个 LINQ 查询都在工作,但我如何获得子类别的所有“级别”?我需要将行从“顶部”插入到“底部”。有没有一种方法可以在任何深度下都有效?

至少这不起作用(重复 pk 值):

我仍在学习 LINQ 并欣赏任何类型的建议(也在 C# 中)。先感谢您。

注意:也许您知道一种方法,我可以暂时禁用 SQL-Server 中的外键约束,并在我从 ADO.NET 插入所有行后启用它。那会简单得多。


这是解决方案,感谢@Tridus:

这是递归函数:

0 投票
2 回答
1664 浏览

.net - 警告:“在 lambda 表达式中使用迭代变量可能会产生意外结果”

编辑:这是这个问题的一个更简单的例子(我删除了我原来的问题):

所以我仍然不明白为什么编译器认为我可能会在第二次迭代中得到意想不到的结果,而我对第一次迭代是安全的。我不认为@ee-m 的有趣链接提供了这种行为的原因,(这不是for-each问题,For n1 As Int32 = 1 To 3也会导致编译器警告)。

我不太相信以下应该是“最佳实践”:

number1正如@Meta-Knight 已经强调的那样,局部变量是多余的,并且使代码的可读性降低。注意:所有三种方式都是安全的并且给出正确的结果。

0 投票
3 回答
1141 浏览

c# - 如何使用字段与类型?

我有一种方法可以确定 a 中列的最小值和最大值DataTable

我想将其重构为:

我需要确定数据类型并使用它而不是硬编码m.Field<double>。这该怎么做?

更新 至于为什么我要计算最小值和最大值之间的差异

0 投票
1 回答
3274 浏览

.net - 使用 LINQ 获取两列的重复项

LINQ 让我发疯。为什么以下查询不返回重复项,而它只使用一个标识符?我的错误在哪里?


编辑:以下是完整的解决方案,感谢@Jon Skeet 的回答:)

分组的主要问题是我必须使它们成为key属性。我上面代码中的下一个问题是从原始表中获取重复的行。因为几乎每一行都有重复(根据两个字段),结果 DataTable 包含 100 行中的 99 行,而不仅仅是 19 个重复值。我只需要选择第一个重复行并将它们与 PK 上的原始表连接起来。

虽然这在我的情况下有效,但如果我只有复合键,也许有人可以解释我如何从原始表中只选择重复项。


编辑:我自己已经回答了问题的最后一部分,所以这就是我所需要的:

我需要Let-Keyword以将其他列保持在相同的上下文中并仅返回分组副本的第一行。通过这种方式,我可以使用CopyToDataTable从重复行创建 DataTable。

总体上只需几行代码(我可以保存第二个查询以查找原始表中的行)来查找多列上的重复项并创建它们的 DataTable。