LINQ, ошибка «Типы аргументов не совпадают», что это значит, как мне ее исправить? - PullRequest
2 голосов
/ 09 июня 2010

Я новичок в linq и пытаюсь привязать данные к анонимному типу.

Я использую SubSonic 3.0 в качестве DAL.

Я делаю выбор из 2 таблиц, как это

        var myDeal = (from u in db.Users
                  select new
                      {
                          UserID = u.UserID,
                          UserRoleID = (from ur in u.UserRoles where u.UserRoleID == ur.UserRoleID select ur).FirstOrDefault().UserRoleID
                      });
    foreach (var v in myDeal) //dies first time here
    {
    }

Затем, когда я связываю данные или пытаюсь перебрать коллекцию, я получаю ошибку «Типы аргументов не совпадают» во время выполнения.

Я не уверен, что здесь происходит.

Ответы [ 2 ]

2 голосов
/ 09 июня 2010

Обнуляется ли одно из полей идентификатора?

Если это так, вам нужно получить доступ к свойству .Value

var myDeal = (from u in db.Users 
        join ur in     
              select new 
                   { 
                     UserID = u.UserID, 
                     UserRoleID = (from ur in u.UserRoles where u.UserRoleID.Value equals ur.UserRoleID select ur).FirstOrDefault().UserRoleID 
                    });

Вы также можете попробовать что-то вроде этого:

var myDeal = (from u in db.Users
         join ur in db.UserRoles
        on new {ID = u.UserRoleID.value} equals new {ID = ur.UserRoleID} into tempRoles
        from roles in tempRoles.DefaultIfEmpty()
        select new
        {
           UserID = u.UserID, 
                 UserRoleID = roles.UserRoleID
        }); 

Вы используете tempRoles для выполнения левого внешнего соединения. Поэтому, если роль не назначена, вы все равно получите идентификатор пользователя.

Я не проверял это, это только у меня на голове.

Удачи,

Patrick.

1 голос
/ 29 июля 2011

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

Пример в RadGridSparkline, когда мы хотим связать его элементsource

Тип «Значение» должен быть двойным.

Если у нас есть свойство Value, определяет как показано ниже public десятичный ContractValue {set;получить;}

Эта ошибка будет отображаться

...