2009-06-02 4 views
1

У меня проблема при использовании ListView и Linq в качестве источника данных. Ошибка вниз:Указанный приказ недействителен. ListView и Linq

Specified cast is not valid. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidCastException: Specified cast is not valid. 


System.Data.SqlClient.SqlBuffer.get_Int64() +58 
    System.Data.SqlClient.SqlDataReader.GetInt64(Int32 i) +38 
    Read_ForumThreadPostDetail(ObjectMaterializer`1) +95 
    System.Data.Linq.SqlClient.ObjectReader`2.MoveNext() +29 
    System.Linq.WhereSelectEnumerableIterator`2.MoveNext() +96 
    System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +7667556 
    System.Linq.Enumerable.ToList(IEnumerable`1 source) +61 

Исходный код

Public IEnumerable<IForumThreadPost> GetForumPostByThreadAndPost() 
{ 
    ScoutDataDataContext sd = new ScoutDataDataContext(); 
    long ThreadId = Convert.ToInt64(HttpContext.Current.Request.QueryString["id"]); 
    long PostId = Convert.ToInt64(HttpContext.Current.Request.QueryString["postId"]); 
    ///.Skip((pageIndex - 1)*pageSize).Take(pageSize) + int pageIndex, int pageSize 
    return sd.ForumThreadPostDetails 
      .AsEnumerable() 
      .Where(f => f.ThreadId.Equals(ThreadId) && f.PostId.Equals(PostId)) 
      .Select(f => 
       new IForumThreadPost 
       { 
        Id = f.Id, 
        ThreadId = f.ThreadId, 
        PostId = f.PostId, 
        Title = f.Title, 
        ThreadTitle = f.ThreadTitle, 
        Content = f.Content, 
        UserFullName = f.UserFullName, 
        UserId = f.UserId 
       }).ToList(); // error here 

} 

Эта функция имеет работу раньше, поэтому я не могу понять, что проблема есть. Спасибо за помощь.

+0

ли IForumThreadPost интерфейс? – bytebender

ответ

2

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

Являются ли ThreadId и PostId как «BigInt's» в базе данных?

Связаны ли типы между свойствами внутри IForumThreadPost и ForumThreadPostDetails (а класс наследования унаследуется от этого интерфейса, если он даже является интерфейсом)?

Были внесены изменения в таблицу ForumThreadPostDetails в базе данных (смены полей и т. Д.)?

Почему вы звоните .AsEnumerable() на вашем столе?

2

Проблема заключалась в том, что в базе данных Id был int и в коде он был длинным.

0

Здесь можно увидеть несколько вещей. ichiban правильно, измените IForumThreadPost на все, что он должен (ForumThreadPost ???).

Также друг сказал мне, как только вы должны использовать самые простые объекты. Поскольку вы используете Listview, я бы рассмотрел возможность изменения IEnumerable в массив.

Например:

Public ForumThreadPost[] GetForumPostByThreadAndPost() 
{ 
    ScoutDataDataContext sd = new ScoutDataDataContext(); 
    var result = sd.ForumThreadPostDetails 
      .Where(f => f.ThreadId.Equals(ThreadId) && f.PostId.Equals(PostId)) 
      .Select(f => 
        new ForumThreadPost 
        { 
          Id = f.Id, 
          ThreadId = f.ThreadId, 
          PostId = f.PostId, 
          Title = f.Title, 
          ThreadTitle = f.ThreadTitle, 
          Content = f.Content, 
          UserFullName = f.UserFullName, 
          UserId = f.UserId 
        }); 

    return result.ToArray(); 

} 
Смежные вопросы