LINQ,从多表中选择

时间:2015-08-03 13:57:29

标签: c# database linq

我有两个表:QuestionsEducations,这些表之间没有任何关系。

如何从这两个表格中选择最后10个(按日期排序)项目的组合?

enter image description here

3 个答案:

答案 0 :(得分:0)

你想要像

这样的东西
 var result = questions.OrderByDescending(i => i.id).Take(5).Union(education.OrderByDescending(i => i.id).Take(5));

答案 1 :(得分:0)

在LINQ中,您无法连接两个具有o关系的表,这将需要执行查询。你最好做两个LINQ to SQL查询,将每个表的最后10个选择成类似的结构,然后进行这两个枚举,做一个联合并取最后10个。

如果您使用的结构如下:

public struct QuestionsEducationsJoin
{
    public DateTime date;
    public int QuestionID;
    public string Question;//...;
    public int EducationID;
    public string Education;//...;
}

然后,您可以从两个表中选择此结构:

var questionEnumeration = database.Questions
   .OrderByDescending(question => question.DateField)
   .Take(10)
   .Select(question => new QuestionsEducationsJoin()
       {
           date = question.DateField;
           //...
       });

var educationEnumeration; //...

var outputEnumeration = questionEnumberation
    .Union(educationEnumeration)
    .OrderByDescending(x => x.date)
    .Take(10);

答案 2 :(得分:0)

答案取决于您是否需要结果列表是多态的(共享公共接口的对象列表,公开要操作的公共属性)或者您不容易知道如何的简单对象列表铸造。

如果您想要使用两者共有的字段,请创建这些公共属性的接口,并让两个类都实现该接口。例如,界面可能是

Interface iBrainStuff
{
    public DateTime DateCreated;
    public int AreaOfExpertise;
    public string Description;

}

然后,您只需在每个类中实现接口:

public class question: iBrainStuff


public class education: iBrainStuff

然后您创建结果列表

List<iBrainStuff> results = new List<iBrainStuff>();

然后你

results.AddRange(context.educations.OrderByDescending(x => x.DateCreated).Take(5);

results.AddRange(context.questions.OrderByDescending(x => x.DateCreated).Take(5);

这会将前十名(每名5名)列入结果列表。结果列表中的结果都可以查询其iBrainStuff接口字段:

Interface iBrainStuff
{
    public DateTime DateCreated;
    public int AreaOfExpertise;
    public string Description;

}
相关问题