首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将自己的SQL插入到ASP.NET MVC4控制器方法中?

如何将自己的SQL插入到ASP.NET MVC4控制器方法中?
EN

Stack Overflow用户
提问于 2013-06-10 10:15:22
回答 1查看 335关注 0票数 1

我正在编写一个RESTful web服务,用于使用ASP.NET MVC4和实体框架访问Azure SQL中的数据。

我为一个名为QuizFamilies的表创建了一个控制器,VS生成了常见的REST疑似对象: GetQuizFamilies、PutQuizFamilies等。

但是,我想定义我自己的SQL,它将只返回特定的列和行。

例如,在GetQuizFamilies方法中,我希望指定以下内容:

代码语言:javascript
复制
SELECT QuizFamilies.ID, QuizFamilies.Title, ImageData.Uri
FROM QuizFamilies
LEFT OUTER JOIN Images ON QuizFamilies.ImagesID = Images.ID
LEFT OUTER JOIN ImageData on Images.ImageDataID = ImageData.ID

我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2013-06-10 10:54:27

使用EF,可以通过GroupJoin执行左外部连接。有关joins的更多信息,请访问http://msdn.microsoft.com/en-us/library/bb896266.aspx。这是另一个可能有帮助的例子。http://msdn.microsoft.com/en-us/library/vstudio/bb397895.aspx。至于投影,可以使用匿名类型来执行,例如

代码语言:javascript
复制
select new { Amount = 108, Message = "Hello" }

您的查询可能如下所示

代码语言:javascript
复制
var query = from qf in context.QuizFamilies
join images in context.Images on qf.ImagesID = images.ID into quizImages
join imageData in context.ImageData on images.ImageDataID = imageData.ID into imgdata
from images in quizImages.DefaultIfEmpty()
from imageData in imgdata.DefaultIfEmpty()
select new { Id = qf.ID, Title = qf.Title, Uri = imageData.Uri};

更新

如果想要更改默认的Get实现,只需删除代码并更新方法签名即可。你不能返回匿名类型,所以如果你仍然只想要这3个字段,你需要一个额外的类。我个人会保留默认的Get方法,并添加另一个方法

代码语言:javascript
复制
public class QuizFamilyTitleAndUri
{
    public String Id {get; set;}
    public String Title {get; set;}
    public Uri ImageUri {get; set;}
}

public IEnumerable<QuizFamilyTitleAndUri> GetQuizFamilies() 
{ 
    return var query = from qf in db.QuizFamilies
    join images in db.Images on qf.ImagesID = images.ID into quizImages
    join imageData in db.ImageData on images.ImageDataID = imageData.ID into imgdata
    from images in quizImages.DefaultIfEmpty()
    from imageData in imgdata.DefaultIfEmpty()
    select new QuizFamilyTitleAndUri() { Id = qf.ID, Title = qf.Title, ImageUri = imageData.Uri};

}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17016069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档