gpt4 book ai didi

c# - 最佳LINQ过滤方法

转载 作者:太空宇宙 更新时间:2023-11-03 22:55:44 24 4
gpt4 key购买 nike

我在 LINQ 中过滤项目列表的结果,我看到了两种方法,想知道哪种方法(如果有的话)更好。一种是我在使用 Intellisense 后想出的方法,另一种来自 ASP.NET MVC 教程 ( found here )

我的方法

    // GET: ProductVersions
public ActionResult Index(string productName)
{
var productVersions = db.ProductVersions.Include(p => p.LicenceVersion).Include(p => p.Product);

if (!string.IsNullOrEmpty(productName))
{
productVersions = productVersions.Where(s => s.Product.Name == productName);
}

return View(productVersions.ToList());
}

教程方法

public ActionResult Index(string movieGenre)
{
var GenreLst = new List<string>();

var GenreQry = from d in db.Movies
orderby d.Genre
select d.Genre;

GenreLst.AddRange(GenreQry.Distinct());
ViewBag.movieGenre = new SelectList(GenreLst);

var movies = from m in db.Movies
select m;

if (!string.IsNullOrEmpty(movieGenre))
{
movies = movies.Where(x => x.Genre == movieGenre);
}

return View(movies);
}

我的问题

  1. 在性能上是否存在显着差异,尤其是第二个选项非常冗长
  2. 我使用我的方法时是否缺少一种风格惯例
  3. 使用第二种方法还有其他可能的优势吗

~编辑~

原来我需要 ViewBag 数据才能在前端填充下拉过滤器(更可惜),所以我的实际代码如下:

        // GET: ProductVersions
public ActionResult Index(string productName)
{
//Get list of product names to filter by
var ProductLst = new List<string>();
var ProductQry = from pv in db.ProductVersions
orderby pv.Product.Name
select pv.Product.Name;

ProductLst.AddRange(ProductQry.Distinct());
ViewBag.productName = new SelectList(ProductLst);

//Populate product versions
var productVersions = db.ProductVersions.Include(p => p.LicenceVersion).Include(p => p.Product);

//Filter by product name
if (!string.IsNullOrEmpty(productName))
{
productVersions = productVersions.Where(s => s.Product.Name == productName);
}

return View(productVersions.ToList());
}

最佳答案

只有示例代码的最后一部分 与您的问题相当 - 流派列表是 UI 中的其他内容,您的代码中不存在,这很好。所以我们要比较的是:

var productVersions = db.ProductVersions.Include(p => p.LicenceVersion)
.Include(p => p.Product);

if (!string.IsNullOrEmpty(productName))
{
productVersions = productVersions.Where(s => s.Product.Name == productName);
}

return View(productVersions.ToList());

对比

var movies = from m in db.Movies
select m;

if (!string.IsNullOrEmpty(movieGenre))
{
movies = movies.Where(x => x.Genre == movieGenre);
}

return View(movies);

它们实际上是相同的 - 主要区别在于您的代码中包含额外的内容,如果您需要它们,这很好。

它们是如此的具有可比性,以至于在比较方面没有什么可谈的。

我个人更喜欢您示例中的 ToList(),因为它强制数据在 Controller 而不是 View 中具体化。与此相反的是,让 View 具有可查询 允许 View 进一步组合它。我不希望我的 View 构成查询,但这是一个风格点。

关于c# - 最佳LINQ过滤方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45455406/

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