1

此代码有效,但速度非常慢。我正在使用实体框架 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);
    }
}
4

3 回答 3

3
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();
于 2013-10-20T16:53:25.427 回答
1

只需摆脱 .ToList() 调用,性能应该会显着提高。

于 2013-10-20T16:53:05.260 回答
0

我猜“空”检查是不必要的,但不看你的 EDM/DataModel 这纯粹是猜测。

var e = c.Entities.Where(
                     x => x.Address.AddressType.AddressTypeID == 1
                       && x.Tags.Any(y => y.Feature.FeatureID == 39)
                    );
 foreach (var a in p)
        {
            var d = a.Tags.Where(y => y.Feature.FeatureID == 39).FirstOrDefault();

            if (d != null)
            {
                e.Add(a);
            }
        }
于 2013-10-20T17:01:13.100 回答