通常我会像这样进行查询
var Incentivo = _contexto.Incentivos.Where(x => x.EmpleadoID.Equals(ce) && x.mdEstatusRegistro)
然后我像这样更新表格:
Incentivo.nPorcentajeAJU = (ajuste / Incentivo.nSueldoActual) * 100;
Incentivo.nSueldoNuevo = Incentivo.nSueldoActual + (Incentivo.nSueldoActual * Incentivo.nPorcentajeMAT) + (Incentivo.nSueldoActual * Incentivo.nPorcentajeAJU);
Incentivo.mdFechaModificacion = f;
Incentivo.mdUsuarioModificacion = Usuario;
this._contexto.Entry(Incentivo).State = System.Data.Entity.EntityState.Modified;
它工作正常,但现在我想在查询中使用Join
,如:
var Incentivo = _contexto.Incentivos.Where(x => x.EmpleadoID.Equals(ce) && x.mdEstatusRegistro)
.Join(captura, x => x.CapturaID, y => y.ID, (x, y) => new { x, y });
但是现在更新是无用的我得到了:
严重级代码描述项目文件行抑制状态 错误CS1061'IQueryable<>'不包含'nPorcentajeAJU'的定义,也没有扩展方法'nPorcentajeAJU'接受'IQueryable<>'类型的第一个参数可以找到(你错过了使用指令或程序集引用吗?)
我需要做些什么才能让它发挥作用?此致
答案 0 :(得分:0)
您看到此错误,因为在Incentivos
加入captura
后您没有选择正确的实体。
以下查询的最终输出类型
var Incentivo = _contexto.Incentivos.Where(x => x.EmpleadoID.Equals(ce) && x.mdEstatusRegistro)
.Join(captura, x => x.CapturaID, y => y.ID, (x, y) => new { x, y });
将如下(我已根据我在问题中看到的内容来设置类型名称。它们在实际代码中可能有所不同。)
System.Linq.Enumerable+<JoinIterator>d__37`4[Incentivo ,System.String,<>f__AnonymousType0`2[Incentivo ,Captura]]
使用查询返回的IEnumerable
,它将不具有Incentivo
类的属性。这就是你看到错误的原因。
要解决此问题,您需要从上述集合中选择Incentivo
的对象。
因此,最终查询应如下所示。
var Incentivo = _contexto.Incentivos.Where(x => x.EmpleadoID.Equals(ce) && x.mdEstatusRegistro)
.Join(captura, x => x.CapturaID, y => y.ID, (x, y) => new { x, y }).Select(a => a.x).FirstOrDefault();
这将为您提供Incentivo
类的对象,您可以在其上访问nPorcentajeAJU
等属性。
如果数据库中不存在匹配的数据,Incentivo
可能为空。在这种情况下,您最好在尝试访问其属性之前检查它是否为空。
以下是一个示例代码,用于复制与您相同的用例以供参考。
public class UserAddress
{
public string Id {get;set;}
public string UserId {get;set;}
public string StreetAddress {get;set;}
}
public class User
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Program
{
public static void Main()
{
var users = new List<User>();
users.Add(new User { Id = "1", FirstName = "User1", LastName = "User1"});
users.Add(new User { Id = "2", FirstName = "User2", LastName = "User2"});
users.Add(new User { Id = "3", FirstName = "User3", LastName = "User3"});
users.Add(new User { Id = "4", FirstName = "User4", LastName = "User4"});
users.Add(new User { Id = "5", FirstName = "User5", LastName = "User5"});
var addresses = new List<UserAddress>();
addresses.Add(new UserAddress{Id = "1", UserId = "1", StreetAddress="Street1" });
addresses.Add(new UserAddress{Id = "2", UserId = "2", StreetAddress="Street2" });
addresses.Add(new UserAddress{Id = "3", UserId = "3", StreetAddress="Street3" });
addresses.Add(new UserAddress{Id = "4", UserId = "4", StreetAddress="Street4" });
var userId = "1";
var q = users.Where(u => u.Id.Equals(userId))
.Join(addresses, u => u.Id, a => a.UserId, (u,a) => new {u,a});
Console.WriteLine(q);
var user = users.Where(u => u.Id.Equals(userId))
.Join(addresses, u => u.Id, a => a.UserId, (u,a) => new {u,a}).Select( x => x.u).FirstOrDefault();
Console.WriteLine(user.Id);
Console.WriteLine(user.FirstName);
Console.WriteLine(user.LastName);
}
}
我希望这可以帮助您解决问题。