用不同类型返回列表的方法



我试图用MVC 5进行搜索,我得到了逻辑,但是我需要的是让返回3个不同列表对象的方法

我有MVC 5

中的视图模型
public class SearchViewModel
{
    public List<Article> ArticleSearch { get; set; }
    public List<Albums> AlbumsSearch { get; set; }
    public List<Blog> BlogSearch { get; set; }
    public List<PDFModel> PDFSearch { get; set; }
}

在我的控制器中:

public ActionResult Index()
{
    using (DBContext db = new DBContext())
    {
        string xyz = "f";
        var Search = new SearchViewModel()
        {
            AlbumsSearch = helper.Search(db.Albums, xyz) <!-- Here i get error -->
        };
        return View(Search);
    }
}

助手搜索:

public static IList Search(object obj,string SearchString) 
{
    using (DBContext db = new DBContext())
    {
        if (obj is Albums)
        {
            var AlbumSearch = db.Albums.Where(x => x.AlbumName.Contains(SearchString) || 
            x.AlbbumSmallDesc.Contains(SearchString) || x.AlbumNameEnglish.Contains(SearchString)||
                    x.AlbbumSmallDescEnglish.Contains(SearchString)).ToList();
            return AlbumSearch as List<Albums>;
        }
        else if(obj is Article)
        {
            var ArticleSearch = db.Article.Where(x => x.ArticleSubject.Contains(SearchString)||x.ArticleSubjectEnglish.Contains(SearchString)||
                    x.ArticleMessage.Contains(SearchString)||x.ArticleMessageEnglish.Contains(SearchString)).ToList();
             return ArticleSearch;
        }
        else
        {
           return null;
        }
     }
 }

我想制作一种返回列表以进行搜索

的方法

我得到此错误:

无法将类型'System.Collections.ilist'转换为'System.Collections.generic.list&lt; Mohamedjibril.models.albums>'。存在明确的转换(您是否缺少演员?)

您可能应该对不同类使用不同的搜索功能。话虽如此,您可以使用一些黑客使用相同的搜索功能。定义一种扩展方法将List<T>转换为List<object>。然后只需从您的方法返回List<object>即可。

public static class ListExtensions
{
    public static List<Object> ToObjectList<T>(this List<T> list) where T : class
    {
        var objectList = new List<object>();
        list.ForEach(t => objectList.Add(t));
        return objectList;
    }
}
List<object> Search(int i)
    {
        if (i == 0)
        {
            return new List<Album>().ToObjectList();
        }
        else
        {
            return new List<Article>().ToObjectList();
        }          
    }

update

使用类似的扩展方法调用搜索时,您可以转换回去。

public static List<T> FromObjectList<T>(this List<object> list) where T : class
    {
        var result = new List<T>();
        list.ForEach(t => result.Add(t as T));
        return result;
    }
List<Album> albums = Search(0).FromObjectList<Album>();

消息非常明确,您正在尝试将IList转换为IList<T>。您的方法返回前者,并且您的视图模型具有后者。

您的搜索方法没有任何优势。您有所有这些if语句。如果您需要30种不同的类型,您该怎么办,如果语句写30种不同?而是这样做:

public static IList<Album> SearchAlbums(string SearchString)
{
    using (DBContext db = new DBContext())
    {
        var AlbumSearch = db.Albums.Where(x => x.AlbumName.Contains(SearchString) ||
        x.AlbbumSmallDesc.Contains(SearchString) || x.AlbumNameEnglish.Contains(SearchString) ||
                x.AlbbumSmallDescEnglish.Contains(SearchString)).ToList();
        return AlbumSearch;
    }
}

也为其他类型创建相同的方法。

相关内容

  • 没有找到相关文章

最新更新