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()。 这有什么问题?
答案 0 :(得分:6)
IEnumerable<>
是一个界面
适用于任何集合
成员可以枚举或迭代
结束了。
IQueryable<>
是一个LINQ接口
适用于任何其集合的集合
成员可以懒洋洋地查询。
(在没有实现的情况下查询
结果集直到其成员为止
访问)
Table<>
是我的课程
以前没用过但是“代表一个
表中的特定类型
基础数据库。“
您选择哪一个取决于您的需求,但IEnumerable<>
是最一般的,所以如果它足够,我会在我的类型声明中使用它。
要插入一个人,请使用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 *方法。