int? and int comparison when LEFT OUTER JOIN in Linq issue(内部?与 Linq 问题中的 LEFT OUTER JOIN 时的 int 比较)
问题描述
我正在开发一个需要使用 Linq-To-Sql 的 WinForms 项目.我已经能够使用 SqlMetal 工具创建我的 DataContext,并进行一些查询.但是现在我有一个我无法解决的问题.
我正在尝试制作一个 LEFT OUTER JOIN 如下:
MyDatabase db = new MyDatabase(...);var query = from p in db.ParentTable在新的 {A = p.child_ID, B = p.OtherID} 上加入 db.ChildTable等于新的 {A = t.ID, B = t.OtherID} 到 j1来自 j1.DefaultIfEmpty() 中的 c选择新的{...};当我编写此查询时,会在编译时在 join 字中引发错误:
join 子句中的表达式之一的类型不正确.调用GroupJoin"时类型推断失败
我知道这个错误是由 p.child_ID 和 t.ID 之间的比较引起的,因为 p.child_ID 是 int? 和 t.ID 是 int.但是,我该如何解决这个问题?如何在不出现此错误的情况下执行 LEFT OUTER JOIN?
p.child_ID 是 int? 因为此列在 SQL 中被标记为 IS NULL.>
希望有人能帮助我,提前致谢.
您可以使用 GetValueOrDefault() 方法.它检索当前 Nullable 对象的值,或对象的默认值.
就你的例子而言:
var query = from p in db.ParentTable在新的 {A = p.child_ID.GetValueOrDefault(0), B = p.OtherID} 上加入 db.ChildTable等于新的 {A = t.ID, B = t.OtherID} 到 j1来自 j1.DefaultIfEmpty() 中的 c选择新的{...};如果 p.child_ID 变为 null 则返回 0.希望这会有所帮助!!
I am working on a WinForms project which requires to use Linq-To-Sql. I have been able to create my DataContext using the SqlMetal tool, and make some queries. But right now I have a problem that I havent been able to solve.
I am trying to make a LEFT OUTER JOIN as following:
MyDatabase db = new MyDatabase(...);
var query = from p in db.ParentTable
join t in db.ChildTable on new {A = p.child_ID, B = p.OtherID}
equals new {A = t.ID, B = t.OtherID} into j1
from c in j1.DefaultIfEmpty()
select new
{
...
};
When I write this query an error is raised at compile-time in the join word:
The type of one of the expressions in the join clause is incorrect. Type inference failed in the call to 'GroupJoin'
I know this error is caused by the comparison between p.child_ID and t.ID since p.child_ID is int? and t.ID is int. But, How can I solve this? How can I perform the LEFT OUTER JOIN without having this error??
p.child_ID is int? since this column is marked as IS NULL in SQL.
Hope someone can help me, thanks in advance.
You can use GetValueOrDefault() method. It retrieves the value of the current Nullable object, or the object's default value.
In terms of your example :
var query = from p in db.ParentTable
join t in db.ChildTable on new {A = p.child_ID.GetValueOrDefault(0), B = p.OtherID}
equals new {A = t.ID, B = t.OtherID} into j1
from c in j1.DefaultIfEmpty()
select new
{
...
};
If the p.child_ID become null than it will return 0. Hope this will help !!
这篇关于内部?与 Linq 问题中的 LEFT OUTER JOIN 时的 int 比较的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:内部?与 Linq 问题中的 LEFT OUTER JOIN 时的 int 比较
基础教程推荐
- 从 VS 2017 .NET Core 项目的发布目录中排除文件 2022-01-01
- 是否可以在 asp classic 和 asp.net 之间共享会话状态 2022-01-01
- 首先创建代码,多对多,关联表中的附加字段 2022-01-01
- 将事件 TextChanged 分配给表单中的所有文本框 2022-01-01
- 全局 ASAX - 获取服务器名称 2022-01-01
- JSON.NET 中基于属性的类型解析 2022-01-01
- 如何动态获取文本框中datagridview列的总和 2022-01-01
- 错误“此流不支持搜索操作"在 C# 中 2022-01-01
- 在 VS2010 中的 Post Build 事件中将 bin 文件复制到物 2022-01-01
- 经典 Asp 中的 ResolveUrl/Url.Content 等效项 2022-01-01
