OK OK, tôi biết đây là một hack, nhưng điều này là cho một dự án thao tác dữ liệu nhỏ và tôi muốn chơi xung quanh. ;-)Tối ưu hóa trình biên dịch của các loại vô danh
Tôi luôn ấn tượng rằng trình biên dịch sẽ kiểm tra tất cả các loại ẩn danh được sử dụng trong chương trình C# và nếu thuộc tính giống nhau, nó sẽ chỉ tạo một lớp đằng sau hậu trường.
Vì vậy, chúng ta hãy nói rằng tôi muốn tạo ra một loại vô danh của một số bộ dữ liệu đánh máy mà tôi có:
var smallData1 = new smallData1().GetData().Select(
x => new { Name = x.NAME, x.ADDRESS, City = x.CITY, State = x.STATE,
Zip = x.ZIP, Country = x.COUNTRY, ManagerName = x.MANAGER_NAME,
ManagerID = x.MANAGER_ID });
var smallData2 = new smallData2().GetData().Select(
x => new { x.Name, x.ADDRESS, x.City, x.State, x.Zip, x.Country,
x.ManagerName,x.ManagerID });
tôi bây giờ có thể làm những điều thú vị như smallData2.Except (smallData1); v.v., và tất cả đều hoạt động.
Bây giờ, những gì nếu tôi có một cặp lớn hơn các loại vô danh:
var bigData1 = new BigAdapter1().GetData().Select(
x => new { x.FirstName, x.LastName, x.Address, x.City, x.State,
x.Zip, x.Country, x.Phone, x.Email, x.Website, x.Custom1, x.Custom2,
x.Custom3, x.Custom4, x.Custom5, x.Custom6, x.Custom7, x.Custom8, x.Custom9,
x.Custom10, x.Custom11, x.Custom12, x.Custom13, x.Custom14, x.Custom15,
x.Custom16, x.Custom17, x.Custom18, x.Custom19, x.Custom20, x.Custom21,
x.Custom22, x.Custom23, x.Custom24, x.Custom25, x.Custom26, x.Custom27,
x.Custom28, x.Custom29});
var bigData2 = new BigAdapter2().GetData().Select(
x => new { x.FirstName, x.LastName, x.Address, x.City, x.State, x.Zip,
x.Country, x.Phone, x.Email, x.Website, x.Custom1, x.Custom2, x.Custom3,
x.Custom4, x.Custom5, x.Custom6, x.Custom7, x.Custom8, x.Custom9, x.Custom10,
x.Custom11, x.Custom12, x.Custom13, x.Custom14, x.Custom15, x.Custom16,
x.Custom17, x.Custom18, x.Custom19, x.Custom20, x.Custom21, x.Custom22,
x.Custom23, x.Custom24, x.Custom25, x.Custom26, x.Custom27,
x.Custom28, x.Custom29});
Bây giờ khi tôi làm bigData2.Except (bigData1); trình biên dịch than phiền:
Instance argument: cannot convert from
'System.Data.EnumerableRowCollection<AnonymousType#1>' to
'System.Linq.IQueryable<AnonymousType#2>'
Tại sao? Quá nhiều thuộc tính, vì vậy trình biên dịch quyết định nó không đáng để tối ưu hóa?
Cảm ơn!
Yup, các bộ điều hợp đang trả về các kiểu dữ liệu hơi khác nhau, nhưng sự khác biệt chỉ là loại tập dữ liệu được nhập (chúng đến từ các cơ sở dữ liệu khác nhau). Tất cả các thuộc tính là các chuỗi, đó là lý do tại sao tôi figured tôi chỉ cần sử dụng một loại vô danh và điều đó sẽ cho phép tôi xử lý dữ liệu như ONE loại loại thay vì hai. – Pandincus
OMG Ở ĐÂU ĐÓ CÓ TỪ ĐẾN TỪ. Err ... được rồi, bạn đã hoàn toàn đúng. Một trong những loại thực sự khác nhau. Tôi đoán đó là những gì sẽ xảy ra khi bạn mã muộn vào ban đêm: -O – Pandincus