У меня две таблицы 1) Товар 2) Категории
В таблице продуктов есть поле под названием «CategoryID», а в таблице категорий есть поле под названием «CategoryName», ID, DateCreated и некоторые другие.
Я хочу использовать LINQ to SQL для запроса всех строк продукта, а также ТОЛЬКО Category.CategoryName. Этот запрос будет использоваться в источнике данных и быть привязан к ListView.
Я знаю, что могу использовать параметр LoadWith с DataContext и соединением. Но проблема в том, что я получаю все строк из Product и Category. Что мне действительно нужно, так это все строки из Product и просто Category.CategoryName
Идеальным решением было бы, если бы опция LoadWith позволяла вам указывать возвращаемые поля, но как ответил здесь, это невозможно.
Я нашел в одну сторону, чтобы сделать это, создать собственный класс с теми же полями, которые я хочу вернуть. Так например
public class ProductInfo
{
public string ProdName { get; set; }
public int ProdID { get; set; }
public int CategoryID { get; set; }
public string CategoryName { get; set; }
}
но проблема в том, что оператор select очень длинный. Например...
var products = from p in db.Products
join c in db.Categories on p.CategoryID = c.ID
select new ProductInfo { ProdName = p.ProdName, ProdID = p.ID,
CategoryID = p.CategoryID, CategoryName = c.CategoryName }
это становится действительно подверженным ошибкам.
Итак, мой вопрос - есть ли лучший способ добиться этого?
Редактировать / Уточнение: Я должен был упомянуть, что ПРИЧИНА, по которой мне нужен промежуточный класс, заключается в том, что мне нужно иметь возможность возвращать набор результатов как определенный тип, в этом случае ProductInfo





Я думаю, что вы в значительной степени на правильном пути, но я бы не стал особо беспокоиться о промежуточном классе:
var products = from p in db.Products
join c in db.Categories on p.CategoryID = c.ID
select new { p.ProdName, ProdId = p.ID, p.CategoryID,
CategoryName = c.CategoryName }
Затем вы можете подключить это к событию Selecting в LinqDataSource. Скотт Гатри рассказывает об этом в разделе «Выполнение проекций пользовательских запросов с помощью события выбора» в своем сообщении «Использование пользовательского выражения Linq с элементом управления asp: LinqDataSource "».
о, черт возьми, я должен был упомянуть, что ПРИЧИНА, по которой мне нужен промежуточный класс, заключается в том, что мне нужно иметь возможность возвращать набор результатов как определенный тип, в данном случае ProductInfo
List<ProductInfo> products = (from p in db.Products
join c in db.Categories on p.CategoryID = c.ID
select new ProductInfo { ProdName = p.ProdName, ProdID = p.ID,
CategoryID = p.CategoryID, CategoryName = c.CategoryName }).ToList<ProductInfo>();