Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Linq To SQL:我可以在一个联接表中只加载一个字段吗?_.net_Sql_Performance_Linq To Sql - Fatal编程技术网

.net Linq To SQL:我可以在一个联接表中只加载一个字段吗?

.net Linq To SQL:我可以在一个联接表中只加载一个字段吗?,.net,sql,performance,linq-to-sql,.net,Sql,Performance,Linq To Sql,我有一个表“orders”,其foreing键为“ProductID” 我想用产品名称在网格中显示订单,而不使用懒虫加载以获得更好的性能,但如果使用数据加载选项,它将检索所有产品字段,这些字段像一个过杀一样接缝 是否有方法仅检索第一次查询中的产品名称? 我可以在DBML中设置一些属性吗 在本文中,表示“外键值”在LINQtoSQL中是“可见的”,但不知道这意味着什么 编辑:更改了标题,因为我不确定是否存在解决方案。 真不敢相信没有人会遇到同样的问题,这是一种非常常见的情况。如果您在linq查询中

我有一个表“orders”,其foreing键为“ProductID”

我想用产品名称在网格中显示订单,而不使用懒虫加载以获得更好的性能,但如果使用数据加载选项,它将检索所有产品字段,这些字段像一个过杀一样接缝

是否有方法仅检索第一次查询中的产品名称? 我可以在DBML中设置一些属性吗

在本文中,表示“外键值”在LINQtoSQL中是“可见的”,但不知道这意味着什么

编辑:更改了标题,因为我不确定是否存在解决方案。

真不敢相信没有人会遇到同样的问题,这是一种非常常见的情况。

如果您在linq查询中只选择所需的列,然后在查询中调用.ToList(),它将立即执行,并且只返回您感兴趣的列。例如,如果您这样做:

var q = from p in dataContext.products select p.ProductName;
var results = q.ToList();

您将返回存储在结果中的产品名称列表,当查询在服务器上执行时,它将只返回ProductName列。

如果您只选择linq查询中需要的列,然后对查询调用.ToList(),它将立即执行,并且只返回您感兴趣的列。例如,如果您这样做:

var q = from p in dataContext.products select p.ProductName;
var results = q.ToList();

您将返回存储在结果中的产品名称列表,当查询在服务器上执行时,它将只返回ProductName列。

您要求的是linq to sql不提供的优化级别。我认为最好的方法是创建一个查询,该查询返回您想要的数据,可能是匿名类型:

from order in DB.GetTable<Orders>()
join product in DB.GetTable<Products>()
on order.ProductID = product.ID
select new { ID = order.ID, Name = order.Name, ProductName = product.Name };
DB.GetTable()中的顺序 在DB.GetTable()中加入产品 on order.ProductID=product.ID 选择新建{ID=order.ID,Name=order.Name,ProductName=product.Name};
您要求的是linq to sql没有提供的优化级别。我认为最好的方法是创建一个查询,该查询返回您想要的数据,可能是匿名类型:

from order in DB.GetTable<Orders>()
join product in DB.GetTable<Products>()
on order.ProductID = product.ID
select new { ID = order.ID, Name = order.Name, ProductName = product.Name };
DB.GetTable()中的顺序 在DB.GetTable()中加入产品 on order.ProductID=product.ID 选择新建{ID=order.ID,Name=order.Name,ProductName=product.Name};
我在另一个问题中得到了解决方案,这与利亚姆克莱南的回答有关,但更清楚(可能问题也更清楚)

我在另一个问题中得到了解决方案,这与利亚姆克莱南的回答有关,但更清楚(可能问题也更清楚)

与所有这些匿名类型一起生活将是一场噩梦。@Eduardo:相反,在某些情况下(特别是这种类型的情况),匿名类型实际上可以使事情变得简单得多。与所有这些匿名类型一起生活将是一场噩梦。@Eduardo:相反,在某些情况下(特别是这种类型的情况)匿名类型实际上可以使事情简单得多。你是说有一个列表,搜索每个记录的名称列表吗?不。。。通常,对于linq,当您在db.Custs select c中运行“var q=from c”时,查询在foreach over q之前不会执行。它还将关闭所有客户字段。如果运行q.ToList(),则“ToList”方法将foreach over q并在列表中插入结果。。。如果您更改查询中的字段,以便执行“var q=(从db.Custs中的c选择c.CustID,c.CustName).ToList();”操作,那么数据库将:1)立即执行查询2)只显示CustID和CustName列。但我希望显示所有订单字段,以及产品名称(和客户名称等)。这与这个问题有什么关系?你说过:1)你不想使用延迟加载2)你有一组特定的列要删除,除了那些运行ToList()的列之外,你不想删除其他任何列提前运行查询更改“选择列表”会精确地降低您要求的字段集。您的意思是让列表搜索每个记录的名称吗?否。。。通常,对于linq,当您在db.Custs select c中运行“var q=from c”时,查询在foreach over q之前不会执行。它还将关闭所有客户字段。如果运行q.ToList(),则“ToList”方法将foreach over q并在列表中插入结果。。。如果您更改查询中的字段,以便执行“var q=(从db.Custs中的c选择c.CustID,c.CustName).ToList();”操作,那么数据库将:1)立即执行查询2)只显示CustID和CustName列。但我希望显示所有订单字段,以及产品名称(和客户名称等)。这与问题有什么关系?您说过:1)您不想使用延迟加载2)您有一组特定的列要删除,并且除了那些列之外,您不想删除任何其他列运行ToList()预先运行查询更改选择列表会完全删除您要求的字段集。