【发布时间】:2013-11-26 14:09:18
【问题描述】:
我有一些从数据库中检索数据的工作代码。为我的解决方案获得一些更好的代码对我来说很有趣。有没有一些方法可以将两个查询组合成一个或类似的东西?
Dim customerTitlesAndIDs = contex.CustomerTable.Select(Function(row) New
With {.ID = row.ID, .CustomerTitle = row.Title}).ToList()
Dim cutomerIdPayment = contex.CustomerPayments.Select(Function(table) New
With
{
.ID = table.CustomerID,
.Range = table.PaymentsRange,
.Values = table.Values
}).ToList()
Dim customerInfos As New List(Of SCustomerInfo)
For Each customer In customerTitlesAndIDs
Dim cID As Integer = customer.ID
customerInfo.Add(New SCustomerInfo(CreateCustomerTable(), cID, customer.CustomerTitle))
For Each cutomerPayments In cutomerIdPayment
If cutomerPayments.ID = cID Then
Dim rangeValue(1) As Object
rangeValue(0) = cutomerPayments.Range
rangeValue(1) = cutomerPayments.Values
Dim dtRow As DataRow = customerInfos.Last().PaymentTable.NewRow()
dtRow.ItemArray = rangeValue
customerInfos.Last().PaymentTable.Rows.Add(dtRow)
End If
Next
Next
Return customerInfos
与 C# 相同的代码(希望没有出现语法错误):
var customerTitlesAndIDs = contex.CustomerTable.Select(row => new
{ .ID = row.ID, .CustomerTitle = row.Title }).ToList();
var cutomerIdPayment = contex.CustomerPayments.Select(table => new
{
.ID = table.CustomerID,
.Range = table.PaymentsRange,
.Values = table.Values
}).ToList();
List<SCustomerInfo> customerInfos = new List<SCustomerInfo>;
foreach (var customer in customerTitlesAndIDs)
{
int cID = customer.ID;
customerInfos.Add(new SCustomerInfo(CreateCustomerTable(), cID, customer.CustomerTitle));
foreach (var cutomerPayments in cutomerIdPayment)
{
if (cutomerPayments.ID = cID)
{
object[] rangeValue = new object[1] {cutomerPayments.Range, cutomerPayments.Values};
DataRow dtRow = customerInfos.Last().PaymentTable.NewRow();
dtRow.ItemArray = rangeValue;
customerInfos.Last().PaymentTable.Rows.Add(dtRow);
}
}
}
以下Structure表示的SCustomerInfo(代码已简化):
Public Structure SWindAltitude
Public PaymentTableAs DataTable
Public Title As String
Public ID As Integer
End Structure
C# 和 VB.NET 解决方案都会有所帮助。
【问题讨论】:
-
也许只有我一个人,但我觉得如果您接受 C# 答案,您也应该发布 C# 代码,因为我不精通 VB
-
你认为将 C# 和 VB.net 代码放在一个问题中会很好吗?
-
C# 和 VBNET 可能会受到威胁,而两者都依赖于 .NET Framework,两种语言都可以在两者之间轻松翻译,如果有人同时要求 C#/VBNET 解决方案特定语言的 .NET 问题。但是有些……人们喜欢对那些愚蠢的事情投反对票或删除标签。
-
使用 JOIN
contex.CustomerTable.Join(contex.CustomerPayments, ...) -
你能展示一些示例代码吗?