Linq для сущностей - включайте foreach внутри запроса - PullRequest
1 голос
/ 02 декабря 2011

я создал следующий код:

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);
            }

это прекрасно работает, но можно ли сделать код короче, убрав фразу 'foreach' и заставив запрос выполнить вставку в словарь? как некая фраза linq «в», которая говорит запросу «вставить productName в первую строку словаря и ProductTitle во вторую»?

Ответы [ 3 ]

3 голосов
/ 02 декабря 2011

Конечно можно!Здесь вы найдете примеры:

http://www.dotnetperls.com/todictionary

в вашем случае:

.ToDictionary(v => v.ProductName, v => v.ProductTitle)
2 голосов
/ 02 декабря 2011

Это может запутать код для внесения изменений во время запроса.Ваша текущая реализация легко читается и выражает намерение цикла.Таким образом, в Enumerable отсутствует метод для этого.

В List вы можете использовать метод ForEach, однако самым чистым способом будет использование метода LINQ ToDictionary * 1006.*.

var productNames = 
 from product in entities.tbl_producttype
  select new { ProductName = product.Name, ProductTitle = product.TitleName };
var allItemNames = 
 productNames 
  .ToDictionary(product => product.ProductName, product => product.ProductTitle);
1 голос
/ 02 декабря 2011

с использованием ToDictionary:

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