Linq使用DataContext

时间:2009-12-10 19:21:45

标签: c# linq-to-sql

1)我想澄清对收藏品的一些疑问。

SampleDBDataContext PersonDB = new SampleDBDataContext("");
Table<Person> p=PersonDB.GetTable<Person>();
IEnumerable<Person> per = PersonDB.GetTable<Person>();
IQueryable<Person> qry = PersonDB.Persons.Select(c => c);

使用Table<Person>,IEnumerable<Person>,IQueryable<Person>之间有什么区别。是否需要选择特定的一个?

2)对于添加记录,我的IDE中没有出现Add()方法,(即)PersonDB.Persons.Add()。    这有什么问题?

3 个答案:

答案 0 :(得分:6)

1

  • IEnumerable<>是一个界面 适用于任何集合 成员可以枚举或迭代 结束了。

  • IQueryable<>是一个LINQ接口 适用于任何其集合的集合 成员可以懒洋洋地查询。 (在没有实现的情况下查询 结果集直到其成员为止 访问)

  • Table<>是我的课程 以前没用过但是“代表一个 表中的特定类型 基础数据库。“

您选择哪一个取决于您的需求,但IEnumerable<>是最一般的,所以如果它足够,我会在我的类型声明中使用它。

2

要插入一个人,请使用InsertOnSubmit()

Person person = new Person() { ... };
PersonDB.Persons.InsertOnSubmit(person);
PersonDB.SubmitChanges();

答案 1 :(得分:1)

Table(T)是LINQ to SQL用于表的查询结果的类;它还用于数据上下文的属性,以便您可以在查询中使用数据上下文属性。所以你帖子中的代码重复了LINQ已经为你做的一些代码。 PersonDB.Persons应该总是足以查询人员。

对于结果,你可能想要一个集合,所以虽然IEnumerable和IQueryable很好,你也可以考虑使用一个列表:

List<Persons> pers = PersonDB.Persons.Where(p => p.name == aName).ToList();

请注意,这是立即执行,而不是延迟(延迟)执行。 ToList()强制立即执行查询。

答案 2 :(得分:0)

表&LT;&GT;很好,一张桌子。它可以返回IQueryable结果,并可以执行插入/其他特定于数据库的操作。它链接到DataContext。

的IQueryable&LT;&GT;是一个很好的列表,而不是列表。基本上,IQueryable实际上并不会在您实际请求之前加载任何数据(延迟执行)。因此,您可以在将整个事件发送到数据库之前执行多个操作。想想IQueryable&lt;&gt;作为正在进行的SQL语句,而不是实际结果。

的IEnumerable&LT;&GT;只是可以枚举的任何对象列表的标准接口。当IQueryable实际执行时,你会得到一个IEnumerable集。

为个体实例显示添加 - 例如Person.Add()。对于原始表,您应该使用Insert *方法。