gpt4 book ai didi

c# - LINQ to SQL 大查询元组

转载 作者:行者123 更新时间:2023-11-30 16:25:37 24 4
gpt4 key购买 nike

我从一开始就没有正确地计划项目,所以我最终在页面周围散布了许多 SQL 查询。

因此,为了避免在所有其他方法中捕获 Sql 异常或由于其中一种方法中的异常而丢失一半页面,我想提取我需要的所有数据:

这是来自 dll 文件的方法,我需要返回它以便我可以在上下文处理后处理对象,但我做的事情非常错误(第一个查询 finalproduct 返回空):

 public static Tuple<Product, IEnumerable<Tag>, IEnumerable<ProductComment>, IEnumerable<ProductVote>, IEnumerable<Review>, IEnumerable<ReviewComment>, IEnumerable<ReviewVote>> GetBigProduct(int productID)    
{
using (ProductClassesDataContext context = new ProductClassesDataContext())
{
var outproduct = from product in context.Products
where product.ID == productID
join producttag in context.ProductTags on product.ID equals producttag.productID
join tag in context.Tags on producttag.TagID equals tag.ID
join productComment in context.ProductComments on product.ID equals productComment.productID
join productVote in context.ProductVotes on product.ID equals productVote.productID
join review in context.Reviews on product.ID equals review.productID
join reviewComment in context.ReviewComments on review.ID equals reviewComment.reviewID
join reviewVote in context.ReviewVotes on review.ID equals reviewVote.reviewID
select new Tuple<Product, Tag, ProductComment, ProductVote, Review, ReviewComment, ReviewVote>
(product, tag, productComment, productVote, review, reviewComment, reviewVote);


var finalProduct = (from t in outproduct select t.Item1).Single();

var finalTags = (from t in outproduct select t.Item2).ToList();

var finalProductComments = (from t in outproduct select t.Item3).ToList();

var finalProductVotes = (from t in outproduct select t.Item4).ToList();

var finalReviews = (from t in outproduct select t.Item5).ToList();

var finalReviewsComments = (from t in outproduct select t.Item6).ToList();

var finalReviewsVotes = (from t in outproduct select t.Item7).ToList();

return new Tuple<Product, IEnumerable<Tag>, IEnumerable<ProductComment>, IEnumerable<ProductVote>, IEnumerable<Review>, IEnumerable<ReviewComment>, IEnumerable<ReviewVote>>
(finalProduct, finalTags, finalProductComments, finalProductVotes, finalReviews, finalReviewsComments, finalReviewsVotes);
}
}

最佳答案

您确定from t in outproduct select t.Item1 只返回一个元素吗?询问?根据documentation , Single() :

Returns the only element of a sequence, and throws an exception if there is not exactly one element in the sequence.

您可能需要 First()FirstOrDefault()反而。

评论后更新

我认为问题出在您的连接上。实际上,我认为你不想在这里加入。我想您需要的是如下内容:

var outproduct = from product in context.Products
where product.ID == productID
select new Tuple<Product, ProductComment, Tag>(
product, // product itself
context.ProductComments.Where(p => p.productID == product.ID).ToList(), // list of comments for this product
(from pt in context.ProductTags
join tag in context.Tags on pt.TagID equals tag.ID
where pt.productID = product.ID
select tag).ToList() // list of tags for this product
// ... more dimensions in tuple
);

然后你会得到,出outproduct查询,包含 <Product, List of ProductComments, List of Tags> 的元组集合.您可以轻松添加其余的元组维度。为简单起见,我删除了它们。

你现在可以直接从你的函数中返回这个元组

return outproduct.FirstOfDefault()

不需要你的var finalProduct = -样式行并重建最终元组。

关于c# - LINQ to SQL 大查询元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9708318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com