C# 是否将属性添加到由多个表组合而成的LINQ?

C# 是否将属性添加到由多个表组合而成的LINQ?,c#,sql,linq,C#,Sql,Linq,我目前有3个单独的表:课程、类别和课程类别。CourseCegory是仅具有CourseID和CategoryId的连接。我需要一种在LINQtoSQL中添加Category属性的方法来抽象多个表的课程对象。我们需要将应用程序更改为只允许一个类别,但我们不想更改数据库,以防以后需要将其切换回 如何将属性添加到课程中,以获取课程类别表中的第一个类别?只需使用新属性扩展课程实体即可。下面将公开与课程关联的单个类别(不是CourseCategory,但是如果您想要CourseCategory,您可以很

我目前有3个单独的表:课程、类别和课程类别。CourseCegory是仅具有CourseID和CategoryId的连接。我需要一种在LINQtoSQL中添加Category属性的方法来抽象多个表的课程对象。我们需要将应用程序更改为只允许一个类别,但我们不想更改数据库,以防以后需要将其切换回


如何将属性添加到课程中,以获取课程类别表中的第一个类别?

只需使用新属性扩展课程实体即可。下面将公开与课程关联的单个类别(不是CourseCategory,但是如果您想要CourseCategory,您可以很容易地更改它),如果没有,则返回null,如果有多个,则抛出异常

public partial class Course
{
   public Category Category
   {
      get { return this.CourseCategories.SingleOrDefault().Category; }
   }
}
您还可以添加setter以使属性可写

更新

如果不允许没有关联的类别,您甚至应该使用Single()而不是SingleOrDefault()。

“第一个类别”-可能需要FirstOrDefault,并且可能在调用.category之前处理null,但是…“只允许一个类别”-这意味着SingleOrDefault()因为发现多个类别违反了“只有一个类别”的要求。这应该会导致一个异常,就像SingleOrDefault()所做的那样,因为可能有一个bug导致课程有多个类别。使用FirstOrDefault()只需返回第一个类别,就可以隐藏这个bug。如果不允许使用零类别,它甚至应该是Single()。我需要使用FirstOrDefault(),因为有几个项目关联了多个类别,这是允许的,但我们不想再这样做了,但我已被限制更改数据库。