c# - 仅使用 Linq 或 Lambda,如何组合这两段代码以返回 List<Entity> e?

标签 c# linq lambda entity-framework-5

此代码有效,但速度非常慢。我正在使用 Entity Framework 5.0。因此,仅使用 Linq 或 Lambda,我如何组合这两段代码以返回 List<Entity> e

CMSEntities c = new CMSEntities();

var p = c.Entities.Where(
    x => x.Address != null
    && x.Address.AddressType != null
    && x.Address.AddressType.AddressTypeID == 1
    && x.Tags.FirstOrDefault() != null)
    .ToList();

List<Entity> e = new List<Entity>();

foreach (var a in p)
{
    var d = a.Tags.Where(y => y.Feature.FeatureID == 39).FirstOrDefault();

    if (d != null)
    {
        e.Add(a);
    }
}

最佳答案

var e = c.Entities.Where(
                         x => x.Address != null
                           && x.Address.AddressType != null
                           && x.Address.AddressType.AddressTypeID == 1
                           && x.Tags.FirstOrDefault(y => y.Feature.FeatureID == 39) != null
                        ).ToList();

您可以直接在一个查询中完成。但我不知道它是否会产生很大的速度差异。

根据 Jon 在评论中的建议,使用 Any 而不是 FirstOrDefault 会更好读。喜欢:

var e = c.Entities.Where(
                         x => x.Address != null
                           && x.Address.AddressType != null
                           && x.Address.AddressType.AddressTypeID == 1
                           && x.Tags.Any(y => y.Feature.FeatureID == 39)
                        ).ToList();

关于c# - 仅使用 Linq 或 Lambda,如何组合这两段代码以返回 List<Entity> e?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19480088/

相关文章:

C# 委托(delegate)未被删除

c# - ASP.NET Core 2 MVC 全局异常处理不起作用

c# - LINQ:根据另一个列表中元素上方的数学条件过滤列表

java - Runnable 是如何从 Java8 lambda 创建的

java - 使用 lambda 表达式求和成员变量?

c# - 动态函数映射

c# - FromBody 收到的帖子导致序列化错误

linq - 模拟和 IQueryable<T>

c# - 使用 foreach 从 List 中过滤对象

python - 如何将带有 lambda 函数的 tesseract 压缩文件部署到 aws lambda