我有方法然后链接到其他人,通过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()在查询语句之前的性能方面是明智的,还是无关紧要?
我有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需要演员工作.我不确定我是做错了什么,还是在第二种场景中确实需要演员.
有人对它有所了解吗?
我试图理解这两种调用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)
所有建议都赞赏.
我正在使用Entity Framework并开始使用linq编写查询.
我有一个Store表,其中每个商店都有一个名称字段.我想要做的其中一个搜索是首字母,我正试图找到实现它的最佳方法.我认为最有效率.
大多数搜索只查找一个键,'A','B','C'等,但其中一个搜索不同,组'0-9'将包含一个键列表,一个用于0,一个用于1所以我的出发点是某种清单.
然后我需要说明商店名称是否以列表中的任何键开头,因为商店不会在表格中存储首字母.
有两件事我正在寻求帮助.首先,如我所概述的那样如何让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 ...的定义"
我有什么想法我做错了吗?
*更新*
它似乎与谓词有关 - .否则就是可用的.
我有一个列表,我想每次排序成随机顺序.
我遇到过几种方法:
list = list.OrderBy(x => Guid.NewGuid()).ToList();
Run Code Online (Sandbox Code Playgroud)var rnd = new Random();
myList = myList.OrderBy(x => rnd.Next()).ToList();
Run Code Online (Sandbox Code Playgroud)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之间的代码量有很大差异,但是有什么好处吗?
我有一些界面问题!
这是代码:
我希望能够通过我的测试模板访问属性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) 我正在使用以下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)
但是,我很难获得正确的语法来将匿名类型转换为我的具体类型.
有人建议吗?