InvalidOperationException с использованием Datacontext - PullRequest
1 голос
/ 16 февраля 2012

Я получаю InvalidOperationException, когда я запускаю это (он говорит "не может определить имя атрибута").Я проверил сеть, но не нашел решения.Это происходит в строке foreach (var c in contacts).

DataContext ctx = new DataContext("CrmConnection");

        var contacts = from c in ctx.contacts
                       where c != null
                       select new
                       {
                           acct = c.parentcustomerid == null ? "" : c.parentcustomerid.name,
                           last = c.lastname == null ? "" : c.lastname,
                           first = c.firstname == null ? "" : c.firstname
                       };

        List<string> lines = new List<string>();

        try
        {
            foreach (var c in contacts) *ex*
            {
                Console.WriteLine(c.acct);
                Console.ReadLine();
                lines.Add(string.Format("{0}\t{1}\t{2}", c.acct, c.last, c.first));
                Console.WriteLine(c.acct);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(String.Format("Error: {0}", ex));
        }

Дайте мне знать, если у вас есть какие-либо идеи.Спасибо.

Ответы [ 3 ]

0 голосов
/ 16 февраля 2012

Это исключение произошло при выполнении вашего запроса, когда итерация по контексту контактов пытается выполнить ваш запрос из sql. Я думаю, что эта ошибка произошла из-за того, что ваша контекстная модель неправильно сопоставлена ​​с вашей базой данных, может быть другое имя таблицы или свойство.

0 голосов
/ 19 апреля 2013
where c != null

Это проблема. Какое поле вы проверяете на null c.parentcustomerid !=null? Вы не можете выполнить нулевую проверку для объекта.

Кроме того, свойство name из Id будет работать при поиске с использованием LINQ to Crm

0 голосов
/ 16 февраля 2012

Я подозреваю, что c.parentcustomerid - это идентификатор связанного объекта.У него нет свойства с именем name, к которому вы пытаетесь обратиться.

Вы хотите получить доступ к фактическому объекту Customer, на который указывает «parentcustomerid», если вы хотите получить имя родительского клиента.* Если вам нужен идентификатор учетной записи (исходя из свойства acct), просто измените

acct = c.parentcustomerid == null ? "" : c.parentcustomerid.name

на

acct = c.parentcustomerid == null ? "" : c.parentcustomerid
...