我有两个表 - tblExpenses 和 tblCategories,如下所示
费用
ID (PK),
Place,
DateSpent,
CategoryID (FK)
目录
ID (PK),
Name
我尝试了各种 LINQ 方法来从上述两个表中获取所有不同的记录,但没有取得多大成功。我尝试使用UNION和DISTINCT,但没有用。
以上两个表在我的项目的模型部分中定义,而这些部分又将在SQLite中创建表。我需要从两个表中检索所有不同的记录以在网格视图中显示值。
请为我提供一些输入来完成这项任务。我做了一些研究来找到这个问题的答案,但似乎没有什么接近我想要的。如果我重复了这个问题,请原谅。
这是我尝试过的联盟,不同的方法:
不同的 # ==> 给了我重复的值
(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 时出错
我认为当您连接两个表时,联合已经做了distict,您可以尝试一些类似
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 Name FROM tblCategory INNER JOIN tblExpenses ON tblCategory.categoryID = tblExpenses.categoryID;
将结果限制为输出字段中的唯一值。查询结果不可更新。
或
如下所示的"选择不同行"查询:
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