Có lẽ một cái gì đó thực sự dễ dàng, nhưng tôi chỉ không thể nhìn thấy nó ...giống hệt (?) C# và VB.NET LINQ truy vấn trả lại kết quả khác nhau
Tôi tái tạo một truy vấn MS Access trong LINQ. Tôi đã viết nó trong C# đầu tiên để kiểm tra nó, bởi vì tôi thích C#, sau đó tôi dịch nó sang cú pháp VB.Net. Theo như tôi có thể nói hai truy vấn phải giống hệt nhau, nhưng trong khi truy vấn C# trả lại kết quả chính xác, thì VB.NET trả về kết quả bằng không.
Ai có thể biết sự khác biệt có thể là ở đâu?
C# truy vấn:
var table1 = dc.MainTable.Where(o => o.Year == 423).ToList().Select(o => new
{
Key_ID = o.Key_ID.Value,
CropID = o.CropID.Value,
GroupID = o.GroupID.Value,
Surface1 = o.Surface1.Value,
Surface2 = o.Surface2.Value
});
var table2 = dc.OtherTable.Where(o => o.Year == 423).ToList().Select(o => new
{
Key_ID = o.Key_ID.Value,
CropID = int.Parse(o.SAKU_CD),
GroupID = int.Parse(o.SAN_DAN_NO),
Surface1 = Convert.ToDouble(o.KEIHAN_MEN.Value),
Surface2 = Convert.ToDouble(o.SAKU_MEN.Value)
});
var output = table1.Join(table2, t1 => new
{
t1.Key_ID,
t1.CropID,
t1.GroupID,
t1.Surface1,
t1.Surface2
},
t2 => new
{
t2.Key_ID,
t2.CropID,
t2.GroupID,
t2.Surface1,
t2.Surface2
}, (t1, t2) => new OutputDataType()
{
Key_ID = t1.Key_ID,
Year = 423
}).ToList();
Truy vấn VB.NET:
Dim table1 = MainTable.Where(Function(o) o.Year.Value = 423).ToList().Select(Function(o) New With
{
.Key_ID = o.Key_ID.Value,
.CropID = o.CropID.Value,
.GroupID = o.GroupID.Value,
.Surface1 = o.Surface1.Value,
.Surface2 = o.Surface2.Value
}).ToList()
Dim table2 = OtherTable.Where(Function(o) o.Year.Value = 423).ToList().Select(Function(o) New With
{
.Key_ID = o.Key_ID.Value,
.CropID = Convert.ToInt32(o.SAKU_CD),
.GroupID = Convert.ToInt32(o.SAN_DAN_NO),
.Surface1 = Convert.ToDouble(o.KEIHAN_MEN.Value),
.Surface2 = Convert.ToDouble(o.SAKU_MEN.Value)
}).ToList()
Dim output = table1.Join(table2, Function(t1) New With
{
t1.Key_ID,
t1.CropID,
t1.GroupID,
t1.Surface1,
t1.Surface2
}, Function(t2) New With
{
t2.Key_ID,
t2.CropID,
t2.GroupID,
t2.Surface1,
t2.Surface2
}, Function(t1, t2) New OutputDataType With {.Key_ID = t1.Key_ID, .Year = 423}).ToList()
Trong cả hai C# và VB.Net table1
và table2
đều giống nhau, vì vậy nó phải là Join
mà thất bại .
EDIT
Tôi chỉ thay đổi Join
trong VB.Net để truy vấn cú pháp như sau:
Dim output = From t1 In MainTable
Join t2 In OtherTable
On t1.Key_ID Equals t2.Key_ID And t1.GroupID Equals t2.GroupID And t1.CropID Equals t2.CropID And t1.Surface1 Equals t2.Surface1 And t1.Surface2 Equals t2.Surface2
Select New OutputDataTypeData With {.Key_ID = t1.Key_ID, .Year = 423}
Mà cho kết quả chính xác. Nhưng tôi thực sự không nhận được làm thế nào điều này là khác nhau từ các phương pháp mở rộng cú pháp Join
?
Cảm ơn !! Tôi đã bị bắt bởi từ khóa 'Key' trước đây. Tôi nghĩ rằng tôi sẽ in ra lời giải thích của bạn và dán nó vào máy tính của tôi, vì vậy tôi không quên điều này nữa. Cám ơn rất nhiều! –