Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于从两个表中获取不同记录的Linq查询_C#_Linq_Sqlite_Linq To Sql_Inner Join - Fatal编程技术网

C# 用于从两个表中获取不同记录的Linq查询

C# 用于从两个表中获取不同记录的Linq查询,c#,linq,sqlite,linq-to-sql,inner-join,C#,Linq,Sqlite,Linq To Sql,Inner Join,我有两张表——tblExpenses和tblCategories,如下所示 tblExpenses TBL范畴 我尝试了各种LINQ方法从上述两个表中获取所有不同的记录,但没有取得多大成功。我尝试使用UNION和DISTINCE,但都不起作用 上面两个表是在我的项目的“模型”部分中定义的,该部分将在SQLite中创建表。我需要从两个表中检索所有不同的记录,以便在gridview中显示值 请为我提供一些信息来完成这项任务。我做了一些研究来找到这个问题的答案,但似乎没有什么能接近我想要的。请原谅我重

我有两张表——tblExpenses和tblCategories,如下所示

tblExpenses TBL范畴 我尝试了各种LINQ方法从上述两个表中获取所有不同的记录,但没有取得多大成功。我尝试使用UNION和DISTINCE,但都不起作用

上面两个表是在我的项目的“模型”部分中定义的,该部分将在SQLite中创建表。我需要从两个表中检索所有不同的记录,以便在gridview中显示值

请为我提供一些信息来完成这项任务。我做了一些研究来找到这个问题的答案,但似乎没有什么能接近我想要的。请原谅我重复了这个问题

以下是我尝试过的独特方法:

DISTINCT==>为我提供重复值
UNION==>在使用UNION时出错我认为UNION已经做了区分,当您连接两个表时,您可以尝试类似的操作

 var query=(from c in db.tblExpenses select c).Concat(from c in 
            db.tblCategory select c).Distinct().ToList();
您可以尝试以下查询: 如下所示的SELECT DISTINCT查询:

将结果限制为输出字段中的唯一值。查询结果不可更新。 或 如下所示的SELECT DISTINCTROW查询:

查看整个基础表,而不仅仅是输出字段,以查找唯一的行。 参考:

由于您也在选择tblExpenses.ID,因此您将始终获得不同的记录。除非有多个类别具有相同的ID。但这当然是非常非常糟糕的设计

记住,在LINQ中进行连接时,字段名和数据类型应该相同。字段tblExpenses.CategoryID是否为可空字段

如果是,请尝试此连接:


向我们展示您使用UNION和DISTINCT的尝试,因为这是正确的路径。如果UNION不起作用,也许您可以尝试并区分主要问题是您从exp创建笛卡尔积或交叉联接。。。从猫。。。选择。我刚试过你的方法。“System.Collections.Generic.IEnumerable”不包含“Concat”的定义,并且“System.Linq.ParallelEnumerable.ConcatSystem.Linq.ParallelQuery,System.Collections.Generic.IEnumerable”的最佳扩展方法重载包含一些无效参数,可能只是与sql lite相关
ID (PK),
Name
(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();
 var query=(from c in db.tblExpenses select c).Concat(from c in 
            db.tblCategory select c).Distinct().ToList();
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/>
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 
                 });