#linq #sharepoint-2010 #linq-to-entities
#linq #sharepoint-2010 #linq-to-entities
Вопрос:
В настоящее время я использую SharePoint 2010, и на своем бизнес-уровне я использую LINQ для SharePoint. Я сгенерировал все свои классы сущностей с помощью SPMetal.
Мы создаем библиотечную систему, в моей системе есть 2 списка. Первый — это вклад, а второй — участник. Каждый участник содержит ссылку на список участников (первичная ссылка ISBN). Список материалов содержит список книг, и PrimaryISBN не является уникальным в этом списке.
Вклад
ID PrimaryISBN TITLE
1 PRIM1 HardcoverLOTR
2 PRIM1 AudioBookLOTR
3 PRIM2 HardcoverHP
Участник
ID Name PrimaryISBNLookup
1 ABC PRIM1
2 DEF PRIM2
В настоящее время я пытаюсь получить все книги, предоставленные конкретным пользователем, на основе имени.
Мой запрос выглядит примерно так
var result = from _contributor in data.contributor
where _contributor.Name= "ABC"
select new Book
{
Title = contributor.PrimaryISBNLookup.Title
}
Проблема, с которой я в настоящее время сталкиваюсь, заключается в извлечении записей с одинаковым ISBN, но разным названием (У каждого формата будет название, т. Е. у аудиокниги будет название, а у той же книги в твердом переплете будет другое название).
Этот запрос возвращает мне только 1 запись, хотя я думал, что в моей системе есть 2 записи, т. Е. запись с идентификатором (во вкладе), которую я вынужден вставить во время вставки записи в список участников.
Мы высоко ценим вашу помощь.
Ответ №1:
Насколько я понимаю, вы пытаетесь реализовать простое объединение, например, так:
var results = from _contributor in data.contributor
join _contribution in data.contribution
on _contributor.PrimaryISBNLookup equals _contribution.PrimaryISBN
where _contributor.Name == "ABC"
select new Book
{
Title = _contribution.Title
}
Ответ №2:
Если вы хотите использовать DataTable в SPList, попробуйте это:
SPList cList = spWeb.Lists.TryGetList("Customer");
SPList oList = spWeb.Lists.TryGetList("Order");
DataTable cTable= cList.Items.GetDataTable();
DataTable oTable= oList.Items.GetDataTable();
var coList = from tbl1 in cTable.AsEnumerable()
join tbl2 in oTable.AsEnumerable() on tbl1["Title"] equals tbl2["CustomerName"]
select new
{
ItemName = tbl2["Title"],
CustomerName = tbl1["Title"],
Mobile = tbl1["MobileNo"]
};