Как установить отображаемый элемент в объединенное выражение?источником данных является запрос linq - PullRequest
2 голосов
/ 17 мая 2011

Я пытаюсь установить элемент отображения моего списка в объединенное значение из запроса linq:

var query =
     from a in db.Customers
     select a;

listBox1.DataSouce = query;

Я надеялся установить элемент отображения, выполнив что-то вроде этого:

listBox1.DisplayMember = "FirstName" + "LastName";

но очевидно, что это не работает.

как мне это сделать?Я предполагаю, что сложная часть заключается в том, что источник данных является объектом результата запроса linq.Но он индексируется, так что должен быть какой-то способ.

Ответы [ 3 ]

5 голосов
/ 17 мая 2011

Если у вас есть класс Customer, который вы либо написали сами, либо являются обобщенными, но расширяемыми, то, на мой взгляд, лучший способ - добавить к нему новое свойство

namespace SameNameSpaceAsGeneratedCustomerClass {
  public partial class Customer {
    public string FullName { get { return FirstName + " " + LastName; } }
  }
}

Если вы не можете сделать это, вам нужно взглянуть на создание ValueConverter http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx

3 голосов
/ 17 мая 2011

Разобрался случайно:

var query =
                from a in db.LUT_Employees
                where a.position == "Supervisor" && a.department == "Production"
                select new { a, Names = a.lastName + ", " + a.firstName };

            cboProductionSupervisor.DataSource = query;
            cboProductionSupervisor.DisplayMember = "Names";

По сути, я создал на лету новое поле, как в sql. затем используйте это как элемент отображения

0 голосов
/ 17 мая 2011

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

var query =
     from a in db.Customers
     select a;

listBox1.DataSouce = query;

, вы не получите желаемый результат.

для этогоизмените запрос на

   var query =  (from a in db.Customers select new{Name = a.FirstName + a.LastName, OtherDetails = a.OtherDetails}).ToList();

listBox1.DataSouce = query;
ListBox1.DataBind();
...