2015-09-28 3 views
1

У меня есть этот запросLinq ошибка параметра

public IEnumerable<TimesheetModel> FilterByUserId(IEnumerable<TimesheetModel> obj, int FilterUserId) 
{ 
    var query = (from list in obj.Where(x => x.List.Where(x => x.UserId.Equals(FilterUserId))) 
        select new TimesheetModel 
        { 
         TaskDate = list.TaskDate, 
         List = list.List 
        }).ToList(); 

    return query; 
} 

И у меня есть ошибка:

A local variable named 'x' cannot be declared in this scope because it would give a different meaning to 'x', which is already used in a 'parent or current' scope to denote something else.

Почему эта ошибка и как решить эту проблему?

У меня есть эта модель

public class TimesheetModel 
{ 
    public DateTime TaskDate { get; set; } 
    public IEnumerable<TimesheetListModel> List { get; set; } 

    public TimesheetModel() { List = new List<TimesheetListModel>(); } 
} 

И

public class TimesheetListModel 
    { 
     public DateTime Date  { get; set; } 
     public bool? InProgress { get; set; } 
     public string Note  { get; set; } 
     public int  ProjectId { get; set; } 
     public string ProjectName { get; set; } 
     public string Task  { get; set; } 
     public decimal? TimeWorked { get; set; } 
     public int?  Type  { get; set; } 
     public int  UserId  { get; set; } 
     public string UserName { get; set; } 
     public int?  WorkItemId { get; set; } 

    } 

И моя задача фильтрации по UserId эту модель

{ 
    "TaskDate": "2015-01-04T00:00:00", 
    "List": [ 
     { 
      "WorkItemId":24, 
      "ProjectId":3, 
      "ProjectName":"Hello world", 
      "UserId":12, 
      "UserName":"Anatoliy Svetliakov", 
      "Date":"2015-01-04T22:00:00", 
      "Task":"#34 : New task test", 
      "TimeWorked":2, 
      "Note":null, 
      "InProgress":false 
     } 
    ] 
} 
+0

Пожалуйста, уточните вопрос с требуемым выходом. –

+0

Поскольку вы делаете два раза 'x => x' в своем' from' – Sybren

ответ

4

вы использовали, х в качестве переменной в двух лямбда-выражений (obj.Where, это родительская область & list.Where, которая является текущей областью), попробуйте следующее:

public IEnumerable<TimesheetModel> FilterByUserId(IEnumerable<TimesheetModel> obj, int FilterUserId) 
    { 
     var query = (from list in obj.Where(z=>z.List.Any(u=>u.UserId==FilterUserId)) 
         select new TimesheetModel 
         { 
          TaskDate = list.TaskDate, 
          List = list.List.Where(o=> o.UserId.Equals(FilterUserId)).FirstOrDefault() 
         }).ToList(); 

     return query; 
    } 
+0

Но у меня есть ошибка, когда я пишу вот так: 'Невозможно преобразовать лямбда-выражение в тип делегирования 'System.Func ', потому что некоторые возвращаемые типы в блоке неявно конвертируются в тип возвращаемого делегата' и 'Невозможно неявно преобразовать тип' System.Collections.Generic.IEnumerable 'to' bool'' – HUSTLIN

+0

Это связано с тем, что ваш запрос linq неверен. пожалуйста, укажите, чего вы хотите достичь, и я исправлю это. List.Where возвращает список & not boolean, он должен возвращать логическое значение. –

+0

@HUSTLIN Вы должны добавить это в свой вопрос вместо этого ответа. – HimBromBeere

2

Сообщение об ошибке говорит само за себя, вам нужно другую переменную там: -

from list in obj.Where(x => x.List.Where(z => z.UserId.Equals(FilterUserId))) 

Кроме того, вы запроса должны использовать Any вместо Where при сравнении UserId: -

var query = (from list in obj.Where(x => x.List.Any(z => z.UserId.Equals(FilterUserId))) 
        select new TimesheetModel 
        { 
         TaskDate = list.TaskDate, 
         List = list.List 
        }).ToList(); 
1

Вам нужна следующая переменная, чем x:

var query = (from list in obj.Where(x => x.List.Where(y => y.UserId.Equals(FilterUserId))) 
        select new TimesheetModel 
        { 
         TaskDate = list.TaskDate, 
         List = list.List 
        }).ToList();