小编dot*_*oob的帖子

检查IQueryable <T> .Any()是否必要?

我有方法然后链接到其他人,通过IQueryable.这是一个减少的样本.

    public static IQueryable<Deal> Deals(this DbContext context)
    {
        Guard.ThrowIfNull(context, "context");

        var r = new ReadRepo<Deal>(context);

        return r.FindBy()
            .Include("Deals_SitePost")
            .Include("Deals_CommunityPost")
            .Include("Deals_Preorder")
            .Include("Deals_Product")
            .Include("Deals_Sale")
            .Include("Deals_VoucherCode")
            .Include("DealSubcategories");
    }

    public static IQueryable<Deal> ByStore(this IQueryable<Deal> deals, int storeId)
    {
        return deals.Where(d => d.StoreId == storeId);
    }

    public static IQueryable<Deal> WhereFeatured(this IQueryable<Deal> deals)
    {
        return deals.Where(d => d.Deals_SitePost.IsNotNull() && d.Deals_SitePost.IsFeatured);
    }
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,有一个启动'Deals'和一些我用来扩展查询的扩展方法.

在这种情况下,检查并返回where!IQueryable.Any()在查询语句之前的性能方面是明智的,还是无关紧要?

.net c# linq

1
推荐指数
1
解决办法
1035
查看次数

试图将foreach转换为linq等价物

可能重复:
是否可以在不使用foreach的情况下重新创建此语句?

我有2个共享基类的类

DealBookmarkWrapper : BookmarkWrapper
StoreBookmarkWrapper : BookmarkWrapper
Run Code Online (Sandbox Code Playgroud)

我还有以下声明:

// 1 - This works
List<BookmarkWrapper> bm = new List<BookmarkWrapper>();
foreach(var d in deals)
{
    bm.Add(new DealBookmarkWrapper(d));
}

// 2 - This does not work
List<BookmarkWrapper> bm2 = deals.Select(d => new DealBookmarkWrapper(d)).ToList();
Run Code Online (Sandbox Code Playgroud)

1)工作,但2需要演员工作.我不确定我是做错了什么,还是在第二种场景中确实需要演员.

有人对它有所了解吗?

c# linq

1
推荐指数
1
解决办法
299
查看次数

通过这两种不同的方法调用jQuery功能的优缺点是什么?

我试图理解这两种调用JavaScript/jQuery函数的方式之间的差异(如果有的话).

方法1,在document.ready():

$('body').on('click', 'a.popup', popup);
Run Code Online (Sandbox Code Playgroud)

然后

function popup() {
    $(this) // do something    
}
Run Code Online (Sandbox Code Playgroud)

方法2,在document.ready():

popup();
Run Code Online (Sandbox Code Playgroud)

然后

function popup() {
    $("a.popup").click(function (e) {
        // do something here
    });
}
Run Code Online (Sandbox Code Playgroud)

所有建议都赞赏.

javascript jquery

1
推荐指数
1
解决办法
104
查看次数

使用子字符串执行linq搜索 - 有更好的方法吗?

我正在使用Entity Framework并开始使用linq编写查询.

我有一个Store表,其中每个商店都有一个名称字段.我想要做的其中一个搜索是首字母,我正试图找到实现它的最佳方法.我认为最有效率.

大多数搜索只查找一个键,'A','B','C'等,但其中一个搜索不同,组'0-9'将包含一个键列表,一个用于0,一个用于1所以我的出发点是某种清单.

然后我需要说明商店名称是否以列表中的任何键开头,因为商店不会在表格中存储首字母.

有两件事我正在寻求帮助.首先,如我所概述的那样如何让linq正常工作.其次,有关是否这是回收数据的最佳/唯一方法或是否有更好的方法的任何建议.

linq entity-framework

0
推荐指数
1
解决办法
4214
查看次数

Linq使用谓词不起作用

我创建了一个小测试类,它返回xml文件中的数据.

我现在想要使用linq使其更具动态性,但无法使其工作.

public class LenderCollection
{
    string fileName = "C:\\Lenders.xml";

    public IEnumerable<Lender> Lenders { get; set; }

    public void FetchLenders(Expression<Func<Lender, bool>> predicate = null)
    {
        IEnumerable<Lender> lenders = XmlHelper.GetObjectFromXml<List<Lender>>(fileName, "AllLenders");

        Lenders =  predicate.IsNotNull() ? lenders.Where(predicate) : lenders;

    }
}
Run Code Online (Sandbox Code Playgroud)

Visual Studio在"lenders.Where(谓词)"部分给出错误 - 消息是"...不包含Where ...的定义"

我有什么想法我做错了吗?

*更新*

它似乎与谓词有关 - .否则就是可用的.

linq asp.net

0
推荐指数
1
解决办法
162
查看次数

按随机数顺序排序列表

我有一个列表,我想每次排序成随机顺序.

我遇到过几种方法:

  1. list = list.OrderBy(x => Guid.NewGuid()).ToList();
    
    Run Code Online (Sandbox Code Playgroud)
  2. var rnd = new Random();
    myList = myList.OrderBy(x => rnd.Next()).ToList();
    
    Run Code Online (Sandbox Code Playgroud)
  3. static Random random = new Random();
    
    public static IEnumerable<T> RandomPermutation<T>(IEnumerable<T> sequence)
    {
        T[] retArray = sequence.ToArray();
    
        for (int i = 0; i < retArray.Length - 1; i += 1)
        {
            int swapIndex = random.Next(i + 1, retArray.Length);
            T temp = retArray[i];
            retArray[i] = retArray[swapIndex];
            retArray[swapIndex] = temp;
        }
    
        return retArray;
    }
    
    Run Code Online (Sandbox Code Playgroud)

显然,1到3之间的代码量有很大差异,但是有什么好处吗?

c# asp.net random

0
推荐指数
1
解决办法
1213
查看次数

无法从界面中看到属性

我有一些界面问题!

这是代码:

我希望能够通过我的测试模板访问属性Added和ID,但intellisense说不!

我滥用界面了吗?我犯了一个愚蠢的错误吗?

任何建议表示赞赏 - 这让我感到疯狂.

namespace blah.blah.blah
{
    public interface ITrackedItem
    {
        DateTime Added { get; set; }
        int ID { get; set; }
    }

    public class TestTemplate<ITrackedItem>
        where ITrackedItem : new() 
    {
        public SortedSet<ITrackedItem> Set { get; set; }

        public void Test()
        {
            Set = new SortedSet<ITrackedItem>();

            foreach (var item in Set)
            {
                // cannot access any properties here
                // var ID = item.ID; <=============|
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# interface

0
推荐指数
1
解决办法
94
查看次数

Linq - 将匿名类型转换为具体类型

我正在使用以下linq语句:

        var suppliers = SupplierView.Select()
            .GroupBy(x => x.Name.Substring(0, 1).ToUpper(),
                (alphanumeric, suppliers) => new
                {
                    Alphanumeric = alphanumeric,
                    Suppliers = suppliers.OrderBy(x => x.Name).ToList()
                })
            .OrderBy(x => x.Alphanumeric);
Run Code Online (Sandbox Code Playgroud)

我想从一个方法中返回这个,但是为了这样做,我需要使用具体类型而不是匿名类型.

这是具体类型:

public class AlphanumericSuppliers
{
    public string Alphanumeric { get; set; }
    public IOrderedEnumerable<Supplier> Suppliers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是,我很难获得正确的语法来将匿名类型转换为我的具体类型.

有人建议吗?

c# linq asp.net

-2
推荐指数
1
解决办法
901
查看次数

标签 统计

c# ×5

linq ×5

asp.net ×3

.net ×1

entity-framework ×1

interface ×1

javascript ×1

jquery ×1

random ×1