C# Linq到实体-在查询中包含foreach

C# Linq到实体-在查询中包含foreach,c#,linq,linq-to-entities,foreach,C#,Linq,Linq To Entities,Foreach,我创建了以下代码: Dictionary<string, string> allItemNames = new Dictionary<string, string>(); var productNames = from product in entities.tbl_producttype select new { ProductName = product.Name, ProductTitle = pro

我创建了以下代码:

Dictionary<string, string> allItemNames = new Dictionary<string, string>();


var productNames = from product in entities.tbl_producttype
                               select new { ProductName = product.Name, ProductTitle = product.TitleName };

            foreach (var productName in productNames)
            {
                allItemNames.Add(productName.ProductName, productName.ProductTitle);
            }
Dictionary allItemNames=newdictionary();
var PRODUCTNAME=来自entities.tbl\u producttype中的产品
选择新建{ProductName=product.Name,PRODUCTTILE=product.TitleName};
foreach(productNames中的var productName)
{
allItemNames.Add(productName.productName、productName.ProductTitle);
}

它工作得很好,但是我可以通过删除“foreach”短语并让查询插入字典来缩短代码吗?就像linq中的某种“插入”短语告诉查询“将productName插入字典的第一个字符串,将ProductTitle插入第二个字符串”

在查询时进行修改可能会混淆代码。您当前的实现易于阅读,并表达了循环的意图。因此,在可枚举项上没有方法可以做到这一点

列表上
可以使用
ForEach
方法,但是最干净的方法是使用


在查询时进行修改可能会混淆代码。您当前的实现易于阅读,并表达了循环的意图。因此,在可枚举项上没有方法可以做到这一点

列表上
可以使用
ForEach
方法,但是最干净的方法是使用


你当然可以!在这里,您可以找到以下示例:

就你而言:

.ToDictionary(v => v.ProductName, v => v.ProductTitle)

你当然可以!在这里,您可以找到以下示例:

就你而言:

.ToDictionary(v => v.ProductName, v => v.ProductTitle)

使用
进行编辑

allItemNames = productNames.ToDictionary(p => p.Name, p => p.ProductTitle)

使用
进行编辑

allItemNames = productNames.ToDictionary(p => p.Name, p => p.ProductTitle)

只是一个小警告:这将从数据库中选择更多数据(即tbl_producttype表的所有列,而不仅仅是名称和标题名)。在这种情况下可能没有多大区别,但仍然是。是的,它确实有区别,因为有成千上万的产品,谢谢。因此,如果我只想去掉名称和标题,我是否应该首先使用var,就像我所做的那样,然后使用ToDictionary而不是foreach?这只是一个小警告:这将从数据库中选择更多数据(即tbl_producttype表的所有列,而不仅仅是名称和标题名)。在这种情况下可能没有多大区别,但仍然是。是的,它确实有区别,因为有成千上万的产品,谢谢。因此,如果我只想去掉名称和标题,我是否应该先使用var,就像我所做的那样,然后使用ToDictionary而不是foreach?您在上面的第一个答案中写了一条评论,您所说的“这将从数据库中选择更多数据”是什么意思?您的意思是ToDictionary()不应该位于同一个linq查询中,只有在我得到“allItemNames”来操作它而不是foreach?ToDictionary之后,它才会生活在“linq to objects”的世界中(它在IEnumerable上工作,而不是IQueryable上)。这意味着在实际创建字典之前,源表中的所有数据都将被提取到内存中。如果在ToDictionary之前保留“select”,linq to entities可以调整SQL语句以仅选择这两列。您在上面的第一个答案中写了一条注释,“这将从数据库中选择更多数据”是什么意思?您的意思是ToDictionary()不应位于同一个linq查询中,只有在我得到“allItemNames”来操作它而不是foreach?ToDictionary之后,它才会生活在“linq to objects”的世界中(它在IEnumerable上工作,而不是IQueryable上)。这意味着在实际创建字典之前,源表中的所有数据都将被提取到内存中。如果将“select”保留在ToDictionary之前,linqto实体可以调整SQL语句,使其仅选择这两列。