Linq查询从两个表中获取不同的记录

时间:2013-01-25 07:22:05

标签: c# linq sqlite linq-to-sql inner-join

我有两个表 - 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#==&gt;使用UNION

时出错

3 个答案:

答案 0 :(得分:3)

我认为当您加入两个表时,联盟已经在区域中进行了尝试,例如

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

答案 1 :(得分:1)

您将始终获得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 
                 });

答案 2 :(得分:0)

您可以尝试以下查询:

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