我有一个产品列表,随着更多用户添加,该列表将动态增长。我想有这个清单,说:
public class Product()
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public DateTime ProductDateCreated{ get; set; }
//....
}
但是,对于列出的每个项目,我想要显示另一个列表中的其他项目,所以请说出我的广告列表。
public class Advert()
{
public int AdvertId { get; set; }
public string AdvertName { get; set; }
public int AdvertView{ get; set; }
}
var products = db.Products.OrderBy(d=>d.ProductDateCreated).ToList();
--product1
--product2
--product3
--product4
--Advert2 <-- Insert here some how as it has a higher AdvertView than Advert1
--product5
--product6
--product7
--product8
--product9
--Advert1 <-- Insert here some how as it has a lower AdvertView than Advert2
我能描述的最佳方式就像Facebook上的广告一样,当您向下滚动时,您会不时地看到广告。
我使用lambda expressions查询我的数据库,但我想不出从哪开始。
答案 0 :(得分:1)
我会创建一个包含属性的基类,这些属性存在于两个类中(name,id,..?):
public class Product: Items
{
public DateTime ProductDateCreated { get; set; }
//....
}
public class Advert: Items
{
public int AdvertView { get; set; }
}
public class Items //Advert and Products
{
public int Id { get; set; }
public string Name { get; set; }
}
按照你每五件商品的广告要求填写。
List<Advert> adverts = db.Adverts.OrderByDescending(a => a.AdvertView).ToList();
List<Product> products = db.Products.OrderBy(d => d.ProductDateCreated).ToList();
List<Items> ResultList = new List<Items>();
for (int i = 0; i < products.Count; i++)
{
ResultList.Add(products[i]);
if ((i + 1) % 5 == 0)
{
int advertsIndex = i / 5;
if (adverts.Count + 1 >= advertsIndex)
ResultList.Add(adverts[advertsIndex]);
}
}
答案 1 :(得分:0)
逐页选择产品,并将页面中的产品添加到基本列表中。之后,从DB中选择一个广告并将其添加到同一个基本列表中。
List<object> allItems = new List<object>();
int numOfProdPerPage = 5;
int n = ... // number of products to be listed
var products = db.Products.OrderBy(d=>d.ProductDateCreated);
var adverts = db.Adverts.OrderByDescending(d=>d.AdvertView);
for(int p = 0; p< n / numOfProdPerPage ; p++)
{
var productsPerPage = products.Skip(numOfProdPerPage * p)
.Take(numOfProdPerPage ).ToList();
allItems.AddRange(products);
Advert advert = adverts.ElementAt<Advert>(p);
allItems.Add(advert);
}
答案 2 :(得分:0)
这是另一种方法:
在示例中,我只显示产品名称和广告名称。理想情况下,您会覆盖ToString()
,以便他们正确展示自己,但您的问题似乎是关于如何订购广告并在每五种产品后显示它们。
示例代码:
var products = db.Products.OrderBy(d => d.ProductDateCreated).ToList();
var adverts = db.Adverts.OrderByDescending(a => a.AdvertView).ToList();
for (int i = 0; i < products.Count; i++)
{
Console.WriteLine(products[i].ProductName);
if ((i + 1) % 5 == 0)
{
Console.WriteLine(adverts[(i / 5) % adverts.Count].AdvertName);
}
}
答案 3 :(得分:-1)
在代码中的某处,您肯定有一个函数可以将列表呈现为HTML,插入计数器变量并跟踪已经显示的项目数。如果您遇到第五个项目,请在那里放置一个新的广告。
void RenderToHTML(List<Product> Products)
{
int AdvertCounter = 0;
foreach (Product product in Products)
{
if (AdvertCounter == 5)
{
Advertcounter = 0;
AddAdvertToList(); //implement somewhere else
}
Advertcounter++;
AddProduct(product); //implement somwhere else too
}
}
答案 4 :(得分:-1)
尝试使用以下内容:
List<Product> list1;
List<Advert> list2 ;
//Full list1 && list 2
int counterForList2 = 0;
foreach (string value in list1)
{
Console.WriteLine(value);
if (list1.Count() % 5 == 0)
{
if (counterForList2 == list2.Count)
counterForList2 = 0;
Console.WriteLine(list2[counterForList2]);
counterForList2++;
}
}