Làm cách nào để nhận được dữ liệu đầy đủ thông qua truy vấn khung thực thể

lập trình


Tôi có hai bảng trong cơ sở dữ liệu mà tôi muốn kết hợp và làm việc với dữ liệu đó.

Vì vậy, tôi đã sử dụng đoạn mã đó:

C#
var listOfFoundRespIds = (from a in context.Adresses
						  join e in context.ExtraData
							  on a.LFD equals e.lfd
						  where a.PROJID == 2048
						  select new
						  {
							  RESPID = e.str03,
							  LFD = e.lfd,
							  PROJID = a.PROJID
						  })
						  .ToList();

Bản thân bảng cơ sở dữ liệu có 31.966.037 mục.
Trong khi gỡ lỗi (ngay sau khi thực thi mã), tôi đã khởi động Trình xem iEnumeration và xem xét ngữ cảnh. Địa chỉ và thực hiện xuất csv. Có 995.101 mục trong danh sách đó. Vì vậy, tại thời điểm thực hiện, tôi không có tất cả các mục từ bảng chính để làm việc với nó.

Có lẽ ai cũng có ý kiến ​​gì, cách khắc phục?

Những gì tôi đã thử:

Đã kiểm tra IEnumeration Viewer và kiểm tra csv
Kiểm tra kỹ cơ sở dữ liệu
Đọc tài liệu về Entity Framework và các nội dung SQL khác.

Giải pháp 1

Bạn đang thực hiện một INNER JOIN – bạn sẽ chỉ nhận được kết quả từ Addresses bảng có bản ghi tương ứng trong ExtraData bàn.

Nếu bạn muốn tất cả các bản ghi từ Addresses bảng, ngay cả khi chúng không có bản ghi tương ứng trong ExtraTablethì bạn cần thực hiện một LEFT JOIN.

Thực hiện nối ngoài bên trái (LINQ trong C#) – C# | Microsoft Tìm hiểu[^]

C#
from a in context.Adresses
join ed in context.ExtraData on a.LFD equals e.lfd into edg
from e in ed.DefaultIfEmpty()
where a.PROJID == 2048
select new
{
    RESPID = e.str03,
    LFD = e.lfd,
    PROJID = a.PROJID
}

コメント

タイトルとURLをコピーしました