2012-09-02 23 views
5

Tôi đang sử dụng C# và SQLite cho Cơ sở dữ liệu cho Windows-8-Metro-App. Tôi muốn sử dụng một Join-Command, nhưng không biết cách đọc dữ liệu đã cho. Điều này sẽ không làm việc:SQLite Tham gia trong Windows 8 Metro C# với sqlite-net

db.Query<Person>("SELECT * FROM Person, Job WHERE Person.JobID = Job.ID"); 

Và điều này không được thực hiện:

db.Query<Person, Job>("SELECT * FROM Person, Job WHERE Person.JobID = Job.ID"); 

người có một ý tưởng làm thế nào để làm điều này?

Trả lời

7

Các tham gia là tốt, nếu lỗi thời - bạn nên sử dụng cú pháp mới hơn

SELECT * FROM Person INNER JOIN Job ON Person.JobID = Job.ID 

Vấn đề của bạn là những gì bạn đang quay trở lại - bạn đang quay trở lại cả dữ liệu Person và dữ liệu việc làm - vì vậy bạn cần phải tạo ra một lớp khớp với cấu trúc dữ liệu mà bạn đang quay trở lại - hoặc chỉ trả lại một người hoặc một công việc.

db.Query<Person>("SELECT Person.* FROM Person INNER JOIN Job ON Person.JobID = Job.ID");   
db.Query<Job>("SELECT Job.* FROM Person INNER JOIN Job ON Person.JobID = Job.ID"); 
+0

cách cung cấp cả kết quả bảng dưới dạng ITEM vào hộp danh sách .. ??? @podiluska –

0

Tôi đã có thể sử dụng nó đúng cách, bạn có thể thử.

var db = new SQLiteAsyncConnection(_dbPath); 
var query = from person in await db.Table<Person>().ToListAsync() 
        join job in await db.Table<Job>().ToListAsync() 
        on person.JobID = job.ID 
        select new 
        { 
         Name=person.Name 
        }; 
+0

Trước tiên, điều này không chọn tất cả dữ liệu vào bộ nhớ? Nó không tham gia vào phía SQL? –

+0

@IvanZivkovic có, bạn đang đúng –

+0

Đề xuất này sẽ bị xóa –

Các vấn đề liên quan