Какой класс для возврата из классов LINQ to SQL при использовании JOIN - PullRequest
0 голосов
/ 21 декабря 2009

Я возвращаю List из моих методов BusinessLogic, где Type является одним из классов, сгенерированных классами Linq2Sql. Теперь, если я использую оператор соединения и получаю результат, содержащий свойства (столбцы) из разных таблиц, тогда мой возвращаемый объект должен быть List <> чем?

Я использую компоненты asp.net ajax от Telerik и устанавливаю источник данных, скажем RadGrid, в List.

Я новичок в использовании классов linq2sql. Заранее спасибо.

Ответы [ 7 ]

2 голосов
/ 21 декабря 2009

Вы можете вернуть анонимный объект:

select x from db.Table1
join y in db.Table2
where x.Table2Id equals y.Table2Id
select new
{
   Value1 = x.Value1,
   Value2 = y.Value2
};

Или бросьте свой собственный класс сущностей:

class JoinedTableEntity
{
    public string Value1 { get; set; }
    public string Value2 { get; set; }
}

select x from db.Table1
join y in db.Table2
where x.Table2Id equals y.Table2Id
select new JoinedTableEntity
{
   Value1 = x.Value1,
   Value2 = y.Value2
};

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

Если вы просто передаете данные в Grid или что-то, что использует отображение для отображения данных в любом случае, анонимного объекта, скорее всего, будет достаточно.

1 голос
/ 21 декабря 2009

Просто создайте новый класс Model для хранения данных, так как это будет смесь двух классов.

 var exp = (

                from o in this.reposOrders.All()
                join c in this.reposCustomers.All() on o.CustomerID equals c.CustomerID
                where o.OrderID == id
                select new CustomerOrderItem()
                {
                   OrderID= o.OrderID,
                   CustomerID = c.CustomerID,
                   ItemName = o.ItemName,
                   BillingAddress = c.BillingAddress  
                }
            ).Single();
 return exp;




public class CustomerOrderItem(){
   public int OrderItem { get; set;}
   public int CustomerID { get; set;}
   public string ItemName { get; set;}
   public string BillingAddress { get; set;}
}
0 голосов
/ 21 декабря 2009

В этом контексте необходимо учитывать три различных варианта:

  • Рассмотрите возможность использования представления или хранимой процедуры. Для больших наборов, или где производительность имеет существенное значение, это путь. Импортируйте представление или хранимую процедуру, и у вас будет новый тип
  • Создание анонимного типа на лету. Если вам нужен плоский набор результатов с определенными членами, это путь. В своем запросе используйте новую конструкцию {col1 = abc, col2 = cde, ...} для ее создания. Однако существуют ограничения, поскольку вы не можете передавать анонимный тип между методами (информация о типе недоступна вне локального контекста).
  • На самом деле вам не нужно возвращать присоединенный объект, поскольку он доступен в любом случае через члены вашего первичного объекта, если вы используете ограничения внешнего ключа.
0 голосов
/ 21 декабря 2009

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

radGrid.DataSource = joinQuery.Select( j => new { j.Name, j.Price, j.Quantity, .. } );
0 голосов
/ 21 декабря 2009

Это будет List анонимных типов. Я хотел бы создать класс со свойствами, которые содержат вместо этого объекты таблицы, к которым вы присоединяетесь, и вернуть List из них.

0 голосов
/ 21 декабря 2009

Это универсальный объект, поэтому вы можете сделать (при объявлении переменной):

List<object> obj = from u in db.Users ...
// or
var obj = from u in db.Users ...
0 голосов
/ 21 декабря 2009

Вы можете создать новый класс, который будет иметь свойства того, что вы хотите, тогда, когда вы. Выберите do

List<MyClass> list = ...  .Select(d => new MyClass() { Prop1 = d.P1...etc }).ToList()

Затем вы можете использовать этот список для привязки к вашим элементам управления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...