简体   繁体   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

I have a code that selecting from table and joining multiple tables and joining dbContext.Database.sqlQuery from view in sql server.我有一个从表中选择并加入多个表并从 sql 服务器的视图中加入 dbContext.Database.sqlQuery 的代码。

But it gives me this error但它给了我这个错误

Unable to create a constant value of type 'ITManagement.Models.Employee'.无法创建“ITManagement.Models.Employee”类型的常量值。 Only primitive types or enumeration types are supported in this context.此上下文仅支持原始类型或枚举类型。

My code我的代码

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);
}

Your help please, thanks.请您帮忙,谢谢。

First of all, have you tried nested queries by commenting them out?首先,您是否尝试过将嵌套查询注释掉?

for example;例如;

 //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()

If there is no problem in these two, you can quickly find out which one is causing the problem by commenting the fields.如果这两个都没有问题,你可以通过注释字段快速找出是哪一个导致了问题。

Tip: Also, more than 3 joins will affect your query performance.提示:另外,超过 3 个连接会影响您的查询性能。 Try to split your queries as much as possible.尝试尽可能多地拆分您的查询。

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

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