LINQ to SharePoint 2016 : Value does not fall within the expected range

I have a Dev and a Production SharePoint 2016 environment. For CRUD with lists I am using LINQ to SharePoint (SPMetal) generated classes. I have a list where 27 columns are Person Type. In my dev(http://sp2016/) environment the list is in root/main site but in Prod it is in subsite (https://sp2016/leaveauto). In both environment I have increased the Resource throttling value from 8 to 50 for Lookup View field. From the list I am taking a Person’s Id value (column name: HOD) from a specific Person type column with below code

using (MyDataContext objDataContext = new MyDataContext(_webUrl))                     {                         try                         {                             int approverId = objDataContext.ApproverInfo.FirstOrDefault(x => (string.Compare(x.DeptID,deptId)==0) && (string.Compare(x.Location, location)==0)).HODId;                         }                         catch (Exception ex)                         {                             throw;                         }                     } 

here, HODId is LINQ to SharePoint generated column for HOD and deptId & location values I am passing with parameter.

In Dev environment it is working fine, but in Prod it is giving below error

{System.ArgumentException: Value does not fall within the expected range.    at Microsoft.SharePoint.SPFieldMap.GetColumnNumber(String strFieldName, Boolean bThrow)    at Microsoft.SharePoint.SPListItemCollection.GetColumnNumber(String groupName, Boolean bThrowException)    at Microsoft.SharePoint.SPListItem.GetValue(SPField fld, Int32 columnNumber, Boolean bRaw, Boolean bThrowException)    at Microsoft.SharePoint.SPListItem.get_Item(String fieldName)    at Microsoft.SharePoint.Linq.PropertyMap.GetSPFieldValue(PropertyMap pm, SPListItem item, JoinPath joinPath)    at Microsoft.SharePoint.Linq.SPItemMappingInfo.MaterializeEntity[TEntity](DataContext dc, SPDataList list, SPListItem item, SPItemMappingInfo itemMappingInfo, JoinPath joinPath)    at lambda_method(Closure , SPListItem )    at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()    at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)    at Microsoft.SharePoint.Linq.SPLinqProvider.Execute[T](Expression expression)    at ShopSignboard.lib.Utility.FindNonFinancialApprover(String approvalStatus, String deptId, String location)} 

How can I solve this problem?

Error de conversión al intentar borrar datos con LINQ

en una aplicación sencilla de CRUD en donde tenemos un listado de videojuegos, he intantado borrar algunos de sus registros. La base de datos al contener Foreign Keys no me permite realizarlo sin antes eliminar todos los registros asociados a ese videojuego como por ejemplo, las puntuaciones o la plataforma a la que pertenece.

Lo he intendo mediante consultas linq de las siguientes formas:

var deleteFK = from JuegoPlataforma in context.JuegoPlataformas                        where JuegoPlataforma.IdJuego == id                        select (JuegoPlataforma.IdJuego);          context.JuegoPlataformas.Remove(deleteFK); 

context.JuegoPlataformas.Remove(context.JuegoPlataformas.Where(x => x.IdJuego == id)); 

Pero de las dos me reporta el siguiente error:

introducir la descripción de la imagen aquí

Por ahora no se me ha ocurrido hacerlo de otras formas, ya que no puedo realizar un borrado en cascada.

Cualquier documentación o comentario sería de gran ayuda. Si se necesita alguna información adicional, la ofreceré lo antes posible. Gracias de antemano.

Error al intentar convertir fecha en LINQ

Estoy utilizando LINQ e intento convertir una fecha a un formato especifico y obtengo el siguiente error:

System.NotSupportedException: ‘LINQ to Entities does not recognize the method ‘System.String ToString(System.String)’ method, and this method cannot be translated into a store expression.’

Parte de mi consulta en LINQ es la siguiente

select new TicketReportAux                     {                         TicketId = tblTickets.TK_HD_TICKETS_ID,                         TicketFolio = tblTickets.FOLIO,                         TicketAplicant = tblTickets.CUSTOMER_FULLNAME,                         TicketSubjet = tblTickets.TITLE,                         TicketStatus = tblStatus.NAME,                         TicketService = tblServices.NAME,                         TicketEmployee = tblEmployee.FULLNAME,                         TicketCreateDate = tblRecords.ACTIVITY_DATE.ToString("dd/MM/yyyy")                     };                  foreach (TicketReportAux rowAux in basicReport)                 {                     rowAux.TicketEmployee = rowAux.TicketEmployee.IsEmpty() ? "" : rowAux.TicketEmployee;                     result.BasicReport.Add(rowAux);                 }                  result.Success = true;                 result.Message = "op_exitosa"; 

Adjunto para mayor claridad la imagen del error

introducir la descripción de la imagen aquí

Convierto la fecha de la siguiente manera

TicketCreateDate = tblRecords.ACTIVITY_DATE.ToString("dd/MM/yyyy") 

Pero me genera el error que les comento, pueden ayudarme a solucionarlo o a indicarme la forma correcta de hacerlo

LINQ with Lambda expression – Left Join ,GroupBy ,Count

Necesito pasar esta expresion lambda para ser usada en c#, la uso para saber el número de chas por agentes

 SELECT     aa.UserId agent,     COUNT (c.Id) chatsPerAgent FROM     AvailableAgents aa LEFT OUTER JOIN Chat c ON aa.UserId = c.AgentId WHERE     aa.IsAvailable = 1 GROUP BY     aa.UserId  

y obtener algo asi donde la primera columna es el id del agente y la segunda el numero de chats que esta atendiendo

3fde3b78-815a-4c6a-b03c-a2b473ed12d2    3 74ac56eb-b8d6-44d3-914a-8af6386b00e6    0 a2d31e31-7052-445a-94d5-0af47f751c15    2 daeafdb2-52de-4126-a2eb-498346f3d1nh    0  

Obtener valores de una consulta linq C#

Mi problema es que necesito extraer los valores del usuario que esta ingresando al sistema Ejemplo del usuario Juan necesito conocer su nombre apellido(Esto esta en la tabla Usuarios) y codigo(Esta es de otra tabla llamada roles). Y los valores que voy a extraer los voy almacenar en una variable Global en una clase llamada Global.

Esta es la capa Logica del proyecto en este metodo valido si el usuario existe en la base de datos

public bool Login(Usuario_E Vusuario)     {         using (programacion_ii_c db = new programacion_ii_c())         {             try             {                 var qw = (from u in db.Usuarios                           join x in db.Roles                           on u.IdUsuario equals x.IdRol                           where (Vusuario.Usuario == u.Usuario                            && Vusuario.ContraseÒa == u.Contrasena)                            select new                           {                               Nombres = u.Nombres,                               Usuario = u.Usuario,                               IdUsuario = u.IdUsuario,                               IdRol = x.IdRol,                               Rol = x.Nombre,                               Codigo = x.Codigo                           });                  if (qw.ToList().Count > 0)                 {                     return true;                 }                 else                 {                     return false;                 }             }             catch (Exception ex)             {                 return false;                 throw ex;             }         }     } 

Este es la capa presentacion en el formulario FrmLogin en el boton ingresar

private void btnlogin_Click(object sender, EventArgs e)     {         if (TxtUsuario.Text != "Usuario")         {             if (TxtContraseÒa.Text != "Contrasena")             {                 Usuario_E usuario = new Usuario_E();                 usuario.Usuario = TxtUsuario.Text;                 usuario.ContraseÒa = TxtContraseÒa.Text;                 usuario.Nombres = Global.Nombre;                 usuario.Apellidos = Global.Apellido;                 usuario.Codigo = Global.Apellido;                 Rol_E Rol = new Rol_E();                 Usuario_L acceso = new Usuario_L();                 var validacion = acceso.Login(usuario);                  if (validacion == true)                 {                     DialogResult = DialogResult.OK;                 }                 else                 {                     MessageBox.Show("Usuario o contraseÒa incorrecta", "Revise", MessageBoxButtons.OK, MessageBoxIcon.Warning);                 }             }             else             {                 MessageBox.Show("Error de contrasena", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);             }         }         else         {             MessageBox.Show("Error usuario", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);          }     } 

CLASE GLOBAL SE ENCUENTRA EN LA CAPA PRESENTACION

public class Global {     public static  string Nombre { get; set; }     public static string Apellido { get; set; }     public static string CodigoRol { get; set; } } 

}

Потеря обработчиков событий после использования LINQ

Есть ObservableCollection<string> mystrings, которой я на старте приложения присваиваю значения, и делаю обработчик события mystrings.CollectionChanged += mystrings_OnChange;

Однако дальше мне нужно сделать выборку из этой коллекции, отсеить ненужные элементы, и удалить их из коллекции. Однако когда я делаю

mystrings = new ObservableCollection<string>(mystrings.Where(x => x ...)); 

То после этого у меня mystrings новый обьект, который “потерял” обработчики событий. Как правильнее с этим бороться?

SkipLast of an IEnumerable – Linq Extension

As my answer to this question, I came up with this solution:

static public IEnumerable<T> SkipLast<T>(this IEnumerable<T> data, int count) {   if (data == null || count < 0) yield break;    Queue<T> queue = new Queue<T>(data.Take(count));    foreach (T item in data.Skip(count))   {     queue.Enqueue(item);     yield return queue.Dequeue();   } } 

It returns all items in the set but the count last, but without knowing anything about the size of the data set. I think it’s funny and that it’s working, but a comment claims that is doesn’t. Am I overlooking something?


A version with a circular queue could be:

static public IEnumerable<T> SkipLast<T>(this IEnumerable<T> data, int count) {   if (data == null || count < 0) yield break;   if (count == 0)   {     foreach (T item in data)       yield return item;   }   else   {     T[] queue = data.Take(count).ToArray();     int index = 0;      foreach (T item in data.Skip(count))     {       index %= count;       yield return queue[index];       queue[index] = item;       index++;     }   } } 

Performance wise they seems to be even.


Compared to other solutions like the most obvious:

data.Reverse().Skip(count).Reverse() 

it seems to be at least as fast and for very large set about twice as fast.

Test case:

  int count = 20;   var data = Enumerable.Range(1, count);    for (int i = 0; i < count + 5; i++)   {     Console.WriteLine($  "Skip: {i} => {(string.Join(", ", data.SkipLast1(i)))}");   } 

Any comments are useful.

Obtener la descripción de un Enum en una consulta linq

Trabajo con C#, Visual Studio 2019 Tengo la siguiente consulta

var result = from ov in context.OrdenVentas                          join c in context.Clientes on ov.ClienteId equals c.ClienteId                          where                              (filter.Codigo == null || ov.CodigoNumerico.Contains(filter.Codigo))                              &&                              (!filter.ClienteId.HasValue || ov.ClienteId.Equals(filter.ClienteId.Value))                              &&                              (filter.FechaEmision == null || ov.FechaEmision >= filter.FechaEmision)                              &&                              (filter.FechaCaducidad == null || ov.FechaCaducidad <= filter.FechaCaducidad)                              &&                              ov.Estado == EstadoOrdenVenta.Emitido                          select                              new UniversalExtend()                              {                                  Id = ov.OrdenVentaId,                                  NumeroComprobante = ov.NumeroComprobante,                                  Descripcion = c.RazonSocial,                                  FechaEmision = ov.FechaEmision,                                  FechaCaducidad = ov.FechaCaducidad,                                  Estado =                                   Total = ov.Total                              };             return result.ToList(); 

En estado necesito obtener la descripción de un enum.

En el campo estado(en la db) tengo los valores del enum ahora quiero recuperarlo en una variable estado de tipo string, ¿como puedo leer la descripcion de un enum pasandole un campo ov.Estado el cual tiene el id del enum?

public enum EstadoOrdenVenta : int {     [Description("EMITIDO")]     Emitido = 1,     [Description("APROBADO")]     Aprobado = 2,     [Description("ATENDIDO")]     Atendido = 3 } 

Solo quiero obtener lo que esta en minúscula.

Filtros condicionales usando linq

Trabajo con C#, Visual Studio 2019 Tengo la siguiente query

using (var context = new BusinessContext())         {             var result = from ov in context.OrdenVentas                          join c in context.Clientes on ov.ClienteId equals c.ClienteId                          where ov.Estado == EstadoOrdenVenta.Emitido &&                              (filter.Codigo == null || ov.CodigoNumerico.Contains(filter.Codigo))                              &&                              (!filter.ClienteId.HasValue || ov.ClienteId.Equals(filter.ClienteId.Value))                              &&                              (filter.FechaEmision == null || ov.FechaEmision >= filter.FechaEmision)                              &&                              (filter.FechaCaducidad == null || ov.FechaCaducidad <= filter.FechaCaducidad)                          select                              new UniversalExtend()                              {                                  Id = ov.OrdenVentaId,                                  NumeroComprobante = ov.NumeroComprobante,                                  Descripcion = c.RazonSocial,                                  FechaEmision = ov.FechaEmision,                                  FechaCaducidad = ov.FechaCaducidad,                                  EstadoId = ov.Estado,                                  Total = ov.Total                              };             return result.ToList();         } 

En el filtro debo agregarle un parámetro de estado el cual es emitido pero si no le mando nada me trae a todos los emitidos, si es que no le mando nada no me debe de mostrar nada. ¿Como debería hacerlo?

Saludos!

Перевести sql запрос в LINQ

Есть часть запроса SQL

24 * SUM(ISNULL(CAST(time_op AS float), 0)) AS t_regl 

,где time_op имеет тип DateTime. Мне нужно эту строчку реализовать с помощью linq

Я делала так:

Sum  = 24 * gg.Sum(z =>z.time_op == null ? "01.01.1900 0:00:00" : z.time_op) 

естественно это не работает и куча ошибок с преобразованиями. Помогите sql переделать в linq