Asp.net mvc 4 如何将自己的SQL插入ASP.NET MVC 4控制器方法?

Asp.net mvc 4 如何将自己的SQL插入ASP.NET MVC 4控制器方法?,asp.net-mvc-4,entity-framework-5,Asp.net Mvc 4,Entity Framework 5,我正在编写一个RESTful web服务,用于使用ASP.NETMVC4和实体框架访问Azure SQL中的数据 我为一个名为QuizFamilies的表创建了一个控制器,VS生成了常见的REST疑点:GetQuizFamilies、PutQuizFamilies等 但是,我想定义自己的SQL,它只返回特定的列和行 例如,在GetQuizFamilies方法中,我想指定以下内容: SELECT QuizFamilies.ID, QuizFamilies.Title, ImageData.Uri

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

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

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

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

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

如何执行此操作?

使用EF,可以通过GroupJoin执行左侧外部联接。有关联接的更多信息,请访问。下面是另一个可能有帮助的例子。至于投影,可以使用匿名类型(如

select new { Amount = 108, Message = "Hello" }
您的查询可能类似于

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方法,并添加另一个方法

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};

}
公共类quizfamilytileanduri
{
公共字符串Id{get;set;}
公共字符串标题{get;set;}
公共Uri ImageUri{get;set;}
}
公共IEnumerable GetQuizFamilies()
{ 
返回var query=来自db.QuizFamilies中的qf
将qf.ImagesID=images.ID上db.images中的图像连接到quizImages中
将images.ImageDataID=imageData.ID上的db.imageData中的imageData连接到imgdata中
来自quizImages.DefaultIfEmpty()中的图像
来自imgdata.DefaultIfEmpty()中的imageData
选择new QuizFamilyTitleAndUri(){Id=qf.Id,Title=qf.Title,ImageUri=imageData.Uri};
}

谢谢,但我想问的是,在哪里可以插入代码来执行我想要的操作?澄清一下:例如,默认的GET方法如下所示:public IEnumerable GetQuizFamilies(){return db.QuizFamilies.AsEnumerable();}我无法进入这个步骤,我不知道如何改变它的行为。我是否从该方法派生自己的类并重写该方法?我是否进入其中一个数据模型文件并手动执行某些操作?