簡體   English   中英

Linq查詢從兩個表中獲取不同的記錄

[英]Linq Query to Get Distinct Records from Two Tables

我有兩個表 - tblExpenses和tblCategories如下

tblExpenses

ID (PK),
Place,
DateSpent,
CategoryID (FK)

tblCategory

ID (PK),
Name

我嘗試了各種LINQ方法來獲取上述兩個表中的所有不同記錄,但沒有取得多大成功。 我嘗試使用UNION和DISTINCT,但它沒有用。

上面兩個表在我的項目的Model部分中定義,該部分又將在SQLite中創建表。 我需要從兩個表中檢索所有不同的記錄,以在gridview中顯示值。

請為我提供一些投入來完成這項任務。 我做了一些研究來找到這個問題的答案,但似乎沒有什么接近我想要的。 如果我復制這個問題,請原諒。

這是我試過的UNION,DISTINCT方法:

DISTINCT#==>給我重復值

(from exp in db.Table<tblExpenses >()
                                   from cat in db.Table<tblCategory>()                                       
                                   select new { exp.Id, exp.CategoryId, exp.DateSpent, exp.Expense, exp.Place, cat.Name }).Distinct();

UNION#==>使用UNION時出錯

我認為當你加入兩張桌子時,聯盟已經做了一些你可以嘗試的東西

 var query=(from c in db.tblExpenses select c).Concat(from c in 
            db.tblCategory select c).Distinct().ToList();

您將始終獲得DISTINCT記錄,因為您也選擇了tblExpenses.ID 除非有多個具有相同ID的類別。但這當然是非常非常糟糕的設計。

請記住,在LINQ中創建JOIN時,字段名稱和數據類型應該相同。 字段tblExpenses.CategoryID為可空字段?

如果是這樣,試試這個JOIN

db.Table<tblExpenses>()
.Join(db.Table<tblCategory>(), 
       exp => new { exp.CategoryId }, 
       cat => new { CategoryId = (int?)cat.ID }, 
       (exp, cat) => new { 
                           exp.Id, 
                           exp.CategoryId, 
                           exp.DateSpent, 
                           exp.Expense, 
                           exp.Place, 
                           cat.Name 
                         })
.Select(j => new { 
                   j.Id, 
                   j.CategoryId, 
                   j.DateSpent, 
                   j.Expense, 
                   j.Place, 
                   j.Name 
                 });

您可以嘗試以下查詢:

像這樣的SELECT DISTINCT查詢:

SELECT DISTINCT Name FROM tblCategory INNER JOIN tblExpenses ON tblCategory.categoryID = tblExpenses.categoryID;

將結果限制為輸出字段中的唯一值。 查詢結果不可更新。

要么

像這樣的SELECT DISTINCTROW查詢:

SELECT DISTINCTROW Name FROM tblCategory INNER JOIN tblExpenses ON tblCategory.categoryID = tblExpenses.categoryID;<br/><br/>

查看整個基礎表,而不僅僅是輸出字段,以查找唯一的行。

參考: http//www.fmsinc.com/microsoftaccess/query/distinct_vs_distinctrow/unique_values_records.asp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM