Subsonic 3 - SimpleRepository

6

我正在尝试使用Subsonic 3的简单存储库,并在理解如何处理外键方面遇到了困难...

如果我有一个包含产品对象的表:

int ID; 

string name; 

string description; 

Category category; 

int categoryID (this one is just to persist the product's categoryID to the DB)

and a category object containing 

int ID; 

string name;

我该如何使用存储库返回一个包含所有产品及其类别对象实例的列表?

目前,我编写了一个linq查询,它在product.categoryID = category.ID上进行连接,这很好,但是当我将此查询的结果.ToList()时,产品的类别没有被实例化。

有没有办法做到这一点,或者我必须手动为每个产品实例化类别?

谢谢,

保罗

1个回答

6

你需要使用类似以下的方法,让linq填充它:
var query = from product in repo.All(Product)
join categoryItem in repo.All(Category)
on product.CategoryId equals categoryItem.Id
select new {
ID = product.ID,
名称 = product.name,
描述 = product.description,
分类ID = product.CategoryId
分类 = categoryItem
};


这听起来像是答案...今晚我会试一下,然后告诉你伙计谢谢 - Paul
嗨Podge,感谢你的帮助。为了将其重新转换为产品列表,我是否需要手动遍历列表并为每个结果(当前为[匿名类型])实例化一个新的产品对象? - Paul
我不知道有什么简单的方法,除了像你说的手动分配。在C#中,匿名类型是只读的。另一个选项是单独加载类别并遍历产品。您可以缓存类别表,这样您只需要一次访问数据库。 抱歉,这不是您想要的答案。 - Podge
类似这样的代码: List<Product> prods = repo.All<Product>().ToList();List<Category> categories = (from product in repo.All<Product>() join category in repo.All<Category>() on product.categoryId equals category.Id select category).Distinct().ToList();foreach (Product prod in prods) { prod.category = categories.Find(c => c.Id == prod.categoryId ); } - Podge
TheVillageIdiot, 你真的应该创建一个新的问题线程。无论如何,你遇到了什么错误信息?还有你使用的Subsonic版本是多少? Podge - Podge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接