繁体   English   中英

C# LINQ select from table and join multiple table and join a SQL query view in SQL server

[英]C# LINQ select from table and join multiple table and join a SQL query view in SQL server

我有一个从表中选择并加入多个表并从 sql 服务器的视图中加入 dbContext.Database.sqlQuery 的代码。

但它给了我这个错误

无法创建“ITManagement.Models.Employee”类型的常量值。 此上下文仅支持原始类型或枚举类型。

我的代码

public JsonResult getEmployeeAsset(EmployeeController employee)
{
    var employeeID = Request.QueryString["employeeID"];

    var devices = (from asset in db.Devices
                   where asset.EmployeeID == employeeID
                   join brand in db.DeviceBrands on asset.Brand equals brand.ID
                   join model in db.DeviceModels on asset.Model equals model.ID
                   join type in db.DeviceTypes on asset.DeviceType equals type.ID
                   join room in db.Rooms on asset.FullRoomCode equals room.FullCode
                   //if device has last employee
                   join lsEmp in db.Database.SqlQuery<LDAPUsers>("SELECT * FROM V_LDAP_Users") on asset.LastEmployeeID equals lsEmp.employeeID into lstEmp
                   join sysUser in db.AspNetUsers on asset.sscUser equals sysUser.Id
                   from lastEmployee in lstEmp.DefaultIfEmpty()
                   select new
                   {
                       deviceID = asset.ID,
                       SerialNumber = asset.SerialNumber,
                       Type = type.Type,
                       BrandName = brand.BrandName,
                       ModelName = model.ModelName,
                       MaccCode = asset.MaccCode,
                       PONumber = asset.PONumber,
                       WarrantyDate = asset.WarrantyDate.ToString(),
                       MacAddress = asset.MacAddress,
                       WIFIMacAddress = asset.WIFIMacAddress,
                       PCName = asset.PCName,
                       LastEmployee = asset.LastEmployeeID + "-" + lastEmployee.employeeName,
                       Shared = asset.Shared == 1 ? "True" : "False",
                       Location = room.RoomName,
                       RecordedBy = sysUser.Name,
                       requestID = (from request in db.StoreRequests where request.DeviceID == asset.ID && request.State == 1 && request.VoucherType == "ASD" orderby request.ID select request.ID).FirstOrDefault()
                   }).DefaultIfEmpty();
    return Json(new { assets = devices == null ? null : devices }, JsonRequestBehavior.AllowGet);
}

请您帮忙,谢谢。

首先,您是否尝试过将嵌套查询注释掉?

例如;

 //join lsEmp in db.Database.SqlQuery<LDAPUsers>("SELECT * FROM V_LDAP_Users") on asset.LastEmployeeID equals lsEmp.employeeID into lstEmp
 //requestID = (from request in db.StoreRequests where request.DeviceID == asset.ID && request.State == 1 && request.VoucherType == "ASD" orderby request.ID select request.ID).FirstOrDefault()

如果这两个都没有问题,你可以通过注释字段快速找出是哪一个导致了问题。

提示:另外,超过 3 个连接会影响您的查询性能。 尝试尽可能多地拆分您的查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM