Справка по Linq-запросу

2

У меня есть две коллекции, и вам нужно создать новую коллекцию из двух коллекций.

Предположим, что следующий класс:

public class Widget
{
   property int Id{get;set;}
   property string Label{get;set;}
}

У нас есть два класса IList. Я хотел бы создать анонимный тип с Id, Label и Exists

Итак, сделав это для Id и Label, у меня есть:

var newCol=from w in widgets
           select new {Id=w.Id,Label=w.Label,Exists=????}

Есть ли способ в Linq, который я могу определить, не создавая здесь код цикла?

Edit

Exists сообщает нам, является ли виджет во втором списке. Так, например, одно решение, о котором я только что подумал, было:

var newCol=from w in widgets
           select new {Id=w.Id,Label=w.Label,Exists=myWidgets.Contains(w)}

Где мои виджеты являются вторым IList.

  • 1
    Нам нужно больше информации. Что такое другой IList? Что значит Exists? Вы хотите проверить, существует ли этот виджет в другом IList?
  • 0
    Да, так что мы в основном делаем левое соединение между двумя списками, и я хочу знать, когда элемент находится в обоих списках.
Теги:
linq
linq-to-objects

2 ответа

1
Лучший ответ

Вы также можете сделать это, используя GroupJoin:

var newCol = widgets.GroupJoin(
    otherWidgets,
    w => w.Id,
    w => w.Id,
    (w, joined) => new { Id = w.Id, Label = w.Label, Exists = joined.Any() });
3

Ваш вопрос действительно расплывчатый, но я предполагаю, что это то, что вы хотите:

var newCol = from w in widgets
             select new { Id = w.Id, Label = w.Label, 
                 Exists = others.Contains(o => o.Id == w.Id }
  • 0
    Приятно !!!!!!!!!!!!!!!!
  • 0
    Да, я сожалею о том, что из-за неопределенности было трудно быть откровенным.
Показать ещё 2 комментария
Сообщество Overcoder
Наверх
Меню