我正在使用Entity Framework 6并尝试从我的控制器获取一些数据。数据来自一个单词表,其中键为WordId
(实际单词)。
我的控制器有这种方法:
[Route("Get")]
public IQueryable<Word> Get()
{
return db.Words;
}
这是我的Word
对象:
public class Word
{
public string WordId { get; set; } // WordId (Primary key) (length: 20)
public int CategoryId { get; set; }
}
有没有办法可以使用这种方法来获取A和E之间有第一个字符的单词?
答案 0 :(得分:0)
永远不要从控制器返回Entity
或IQueryables
,而是创建一个模型并按以下所述返回:
string matchStr = "abcde";
[Route("Get")]
public List<WordModel> Get()
{
return db.Words.Where(p=>matchStr.ToUpper().Contains(p.UniqueID.ToUpper().FirstOrDefault())).Select(p=>new WordModel(){
WordId = p.WordId,
CategoryId = p.CategoryId
}).ToList();
}
创建模型类WordModel
,为
public class WordModel
{
public string WordId { get; set; }
public int CategoryId { get; set; }
}
答案 1 :(得分:0)
我同意索菲亚的观点。公开视图模型(基于视图设计)而不是实际实体是一个好主意。让我们假设WordVm就是你的情况。控制器动作的返回类型将是List。添加将从您的操作方法调用的reporsitory或manager类,以返回结果。我正在创建一个可以访问带有Word实体的db上下文类的管理器。
[Route("Get")]
public List<WordVm> Get()
{
var manager = new WordsManager()
return manager.GetWords();
}
public class WordsManager
{
public List<WordVm> GetWords()
{
return repo.Words.Where(a => {
var t = a.Trim().ToUpper().Substring(0, 1)[0];
return t >= 'A' && t <= 'E';
}).ToList();
}
}
谢谢你, 索马。