我正在尝试使用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&gt;'。存在显式转换(您是否错过了演员?)
答案 0 :(得分:0)
您可能应该为不同的类使用不同的搜索功能。话虽如此,你可以使用相同的搜索功能和一点点黑客攻击。定义一种扩展方法,将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();
}
}
<强>更新强>
当您使用这样的扩展方法调用搜索时,您可以转换回来。
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>();
答案 1 :(得分:0)
该消息非常清楚,您正在尝试将IList
转换为IList<T>
。您的方法返回前者,您的视图模型具有后者。
您的搜索方法没有任何优势。你有所有那些if语句。如果你需要30种不同的类型,你会做什么,写30种不同的if语句?而是这样做:
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;
}
}
也为其他类型创建相同的方法。