我试图找出处理一个简单的问题的最好办法:我有一个简单的LINQ加盟两个表。 我知道如何返回类型为一个表,因为它是一样的生成的dbml类。 但是,如果我想要的东西从两个表 - 返回的数据是不是有办法同时返回和使用他们的关系? 难道我真的要创建另一个返回类型从两个表返回的数据? FYI-我不想与其他表对象返回的输出参数; 我也没有返回一个匿名类型很感兴趣。 什么是最好的做法建议?
public IQueryable<Consumer_Question> GetQuestions(int subCategoryId)
{
//create DataContext
MototoolsDataContext mototoolsDataContext = new MototoolsDataContext();
mototoolsDataContext.Log = Console.Out;
var subcategoriestag = (from subCatTag in mototoolsDataContext.Consumer_SubCategoriesTags
join tagQuestion in mototoolsDataContext.Consumer_TagQuestions on subCatTag.TagID equals tagQuestion.TagID
join question in mototoolsDataContext.Consumer_Questions on tagQuestion.QuestionsID equals question.ID
where subCatTag.SubCategoriesID == subCategoryId
orderby subCatTag.ID descending
select question);
//select new { question, tagQuestion });
return subcategoriestag;
}
谢谢你的帮助,
如果您已经定义在LINQ到SQL设计你的人际关系那么你上面的查询不需要连接语法可言,只是“走树”可以根据需要,例如:
var subCategoriesTag = (
from subCatTag in motoToolsDataContext
from tagQuestion in subCatTag.TagQuestions
from question in tagQuestion
where subCatTag.SubCategoriesID == subcategoryId
orderby subCatTag.ID descending
select question
);
请注意,“从”语句的第二和第三个正在使用的对象从以前的一个,因为LINQ到SQL应该已经知道了关系。
不知道更多关于你的关系是很难给出一个比较确切的答案。 我不得不做出什么相关性是一些假设。
听起来像你对我所寻找的是DataLoadOptions.LoadWith <>。 这样,你回到你的问题的对象和相关的对象是在通过定义的关联,同时填充。 事情是这样的:
public IQueryable<Consumer_Question> GetQuestions(int subCategoryId)
{
//create DataContext
using (MototoolsDataContext mototoolsDataContext = new MototoolsDataContext())
{
mototoolsDataContext.Log = Console.Out;
DataLoadOptions options = new DataLoadOptions();
options.LoadWith<Consumer_Questions>(q => q.Consumer_TagQuestions);
options.LoadWith<Consumer_TagQuestions>(tag => tag.Consumer_SubCategoriesTags);
mototoolsDataContext.LoadOptions = options;
var questions = (from subCatTag in mototoolsDataContext.Consumer_SubCategoriesTags
join tagQuestion in mototoolsDataContext.Consumer_TagQuestions on subCatTag.TagID equals tagQuestion.TagID
join question in mototoolsDataContext.Consumer_Questions on tagQuestion.QuestionsID equals question.ID
where subCatTag.SubCategoriesID == subCategoryId
orderby subCatTag.ID descending
select question);
//select new { question, tagQuestion });
return questions;
}
}