Запрос 2 наборов сложных объектов с использованием Linq - PullRequest
0 голосов
/ 17 ноября 2011

У меня есть два списка, состоящих из разных сложных объектов, и каждый из них состоит из 2 отдельных источников данных.Один список может содержать или не содержать записи.Когда какие-либо записи существуют в «необязательном» списке, мне нужно, чтобы «обычный» список подвергался дальнейшей фильтрации.

К сожалению, я могу найти только очень простые примеры здесь и в Интернете, поэтому я задаю этот вопрос.

Псевдологика выглядит так: Когда существует QuickFindMaterial записей, получите все DataSource записей, где query.Name находится в коллекции QuickFindMaterial.Material.Если нет записей QuickFindMaterial, это не влияет на конечный результат.Наконец, выберите все отдельные записи DataSource.

Классы выглядят так:

public class QuickFindMaterial
{
    public string SiteId { get; set; }
    public string Material { get; set; }
}

Код выглядит так: Я прокомментировал мою неудачную WHERE логику ниже

    var dataSource = DocumentCollectionService.ListQuickFind();
    var quickFindMaterial = ListMaterialBySiteID(customerSiteId);

    var distinct = (from query in dataSource
                                    select new
                                               {
                                                   ID = query.DocumentID,
                                                   Library = query.DocumentLibrary,
                                                   ModifiedDate = query.DocumentModifiedDate,
                                                   Name = query.DocumentName,
                                                   Title = query.DocumentTitle,
                                                   Type = query.DocumentType,
                                                   Url = query.DocumentUrl,
                                               })
//.Where(x => x.Name.Contains(quickFindMaterial.SelectMany(q => q.Material)))
//.Where(x => quickFindMaterial.Contains(x.Name))
.Distinct();

Ответы [ 2 ]

0 голосов
/ 17 ноября 2011

Вы можете присоединиться на Имя -> Материал

Пример:

   var distinct = (from query in dataSource
                        join foo in quickFindMaterial on query.Name equals foo.Material
                        select new
                                    {
                                        ID = query.DocumentID,
                                        Library = query.DocumentLibrary,
                                        ModifiedDate = query.DocumentModifiedDate,
                                        Name = query.DocumentName,
                                        Title = query.DocumentTitle,
                                        Type = query.DocumentType,
                                        Url = query.DocumentUrl,
                                    }).Distinct();
0 голосов
/ 17 ноября 2011

Я думаю, это то, что вы хотите:

.Where(x => !quickFindMaterial.Any() || quickFindMaterial.Any(y => x.Name == y.Material))
...