我正在学习Linq to Sql;
您是否总是直接将查询作为业务对象类型的赋值传递,如“返回行”中所做的那样?这有什么限制?有什么要求;属性名称必须等于数据库列名?
如果:
有关限制和需要注意的事项的任何其他相关信息都将非常有用。
示例:
public List<Beer> GetAllBeers()
{
DataClassesDataContext db = new DataClassesDataContext();
var beers = from b in db.Beers
orderby b.BeerName
select b;
return beers.ToList<Beer>();
}
答案 0 :(得分:1)
不是不总是这样......但是当你为linq配置你的应用程序时,它很常见,你最终会得到你的域和数据模型的映射。
然而,您可以使用投影将结果塑造成您想要的任何类别或值类型......
DataClassesDataContext db = new DataClassesDataContext();
var suppliers = from b in db.Beers
orderby b.BeerName
select b.Supplier;
这将只返回供应商属性的IEnumerable<string>
。
或者使用匿名类甚至是你自己的类,你也可以投射到它......
var suppliers = from b in db.Beers
orderby b.BeerName
select new ()
{
Supplier = b.Supplier,
BeerName = b.BeerName
};
或你自己的班级......
var suppliers = from b in db.Beers
orderby b.BeerName
select new MyClass()
{
Supplier = b.Supplier,
BeerName = b.BeerName
};
答案 1 :(得分:1)
当您创建dbml文件并在画布上拖动Beer
表时,设计器会为您生成一个名为Beer
的类。默认情况下,此类将1-1映射到表 - 每列的属性,相同的数据类型等。
如果您愿意,可以更改这些属性 - 您可以更改它们的名称和数据类型,您可以删除它们(如果删除它们,它们将需要在数据库中可以为空),您可以添加不一定的属性映射到数据库,依此类推。
实例化数据上下文对象时,可以使用Beer
从数据库中检索这些db.Beers
对象(类,而不是表)。 LINQ-to-SQL根据设计器中规定的规则填充这些对象 - 即哪个列映射到哪个属性,数据类型等。类上没有映射到列的任何属性都将被赋予默认值,就像一个普通的初始化对象一样。
您可以像使用任何其他对象一样使用这些对象;它们只是具有附加属性的类。您可以在位于dbml文件后面的MyDatabase.designer.cs文件中看到它们。将它们放在一个列表中并返回它们,将它们投影到其他对象中,只选择它们的id
属性 - 无论你需要做什么。