无法从用法推断 Lamda Link 类型参数
Lamda Link type arguments cannot be inferred from usage
我们正在使用实体,我正在尝试在 2 列上加入 2 tables。一个 ID 和服务器 ID。我的原始查询没有考虑服务器(这是我正在尝试修复的问题)
var client = _Context.Address
.Join(_Context.Clients.Where(c => c.Key == Key),
a => a.AddressId,
c => c.AddressId,
(a, c) => a ).FirstOrDefault();
这行得通。但是当我添加服务器时
var client = _Context.Address
.Join(_Context.Clients.Where(c => c.Key == Key),
a => new { a.AddressId, a.ServerId},
c => new { c.AddressId, c.ServerId},
(a, c) => a ).FirstOrDefault();
连接现在在标题中抛出错误。在我的研究中,我发现名称和类型必须匹配。名称确实匹配,并且我尝试分配它们以确保双重确定,但这并不能解决问题。查看实体中的定义,列在地址 table 中为 int,但在客户端中为 nullable int table.
如何将 int 列连接到可为 null 的 int?
编辑:
来自客户table
public int? AddressId { get; set; }
public int? ServerId { get; set; }
来自地址 table
[Key]
[Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int AddressId { get; set; }
[Key]
[Column(Order = 1)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ServerId { get; set; }
How can I join an int column to an nullable int?
你需要让它们成为同一类型,否则编译器将无法决定 TKey 应该是什么,因为 AnonType<int, int>
和 AnonType<int?, int?>
之间没有隐式转换例如将 non-nullable 整数转换为 (int?)
因此它们匹配
Join(_Context.Clients.Where(c => c.Key == Key),
a => new { AddressId = (int?)a.AddressId, ServerId = (int?)a.ServerId},
c => new { c.AddressId, c.ServerId},
你之前逃脱了它,因为对于单个键参数存在从 int
到 int?
的隐式转换,但如果你使用带有连接键中的单个道具:
//this would fail too
Join(_Context.Clients.Where(c => c.Key == Key),
a => new { AddressId },
c => new { c.AddressId },
我们正在使用实体,我正在尝试在 2 列上加入 2 tables。一个 ID 和服务器 ID。我的原始查询没有考虑服务器(这是我正在尝试修复的问题)
var client = _Context.Address
.Join(_Context.Clients.Where(c => c.Key == Key),
a => a.AddressId,
c => c.AddressId,
(a, c) => a ).FirstOrDefault();
这行得通。但是当我添加服务器时
var client = _Context.Address
.Join(_Context.Clients.Where(c => c.Key == Key),
a => new { a.AddressId, a.ServerId},
c => new { c.AddressId, c.ServerId},
(a, c) => a ).FirstOrDefault();
连接现在在标题中抛出错误。在我的研究中,我发现名称和类型必须匹配。名称确实匹配,并且我尝试分配它们以确保双重确定,但这并不能解决问题。查看实体中的定义,列在地址 table 中为 int,但在客户端中为 nullable int table.
如何将 int 列连接到可为 null 的 int?
编辑: 来自客户table
public int? AddressId { get; set; }
public int? ServerId { get; set; }
来自地址 table
[Key]
[Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int AddressId { get; set; }
[Key]
[Column(Order = 1)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ServerId { get; set; }
How can I join an int column to an nullable int?
你需要让它们成为同一类型,否则编译器将无法决定 TKey 应该是什么,因为 AnonType<int, int>
和 AnonType<int?, int?>
之间没有隐式转换例如将 non-nullable 整数转换为 (int?)
因此它们匹配
Join(_Context.Clients.Where(c => c.Key == Key),
a => new { AddressId = (int?)a.AddressId, ServerId = (int?)a.ServerId},
c => new { c.AddressId, c.ServerId},
你之前逃脱了它,因为对于单个键参数存在从 int
到 int?
的隐式转换,但如果你使用带有连接键中的单个道具:
//this would fail too
Join(_Context.Clients.Where(c => c.Key == Key),
a => new { AddressId },
c => new { c.AddressId },