想象一个类,让我们说可以与一个IList<T>或一个一起使用的分页IQueryable<T>.
该类将具有一个int TotalItems属性,该属性(不是那么令人惊讶)获取/设置可查询或可枚举参数的计数.
如果我IEnumerable<T>用作参数,
//simplified
public Pagination(IEnumerable<T> query)
{
TotalItems = query.Count();
}
Run Code Online (Sandbox Code Playgroud)
该Count()方法将是(如果我没看错,这就是问题所在)Enumerable.Count().因此,即使查询是IQueryable<T>(继承自IEnumerable<T>),它也将被枚举(使用"db query"显然不需要).
那么有什么方法可以Queryable.Count()在我IEnumerable<T>实际使用时使用方法IQueryable<T>,或者我必须改变我的设计,例如在这种情况下,2 ctor
//simplified
public Pagination(IEnumerable<T> query)
{
TotalItems = query.Count();
}
public Pagination(IQueryable<T> query)
{
TotalItems = query.Count();
}
Run Code Online (Sandbox Code Playgroud)
编辑
我也明白,IQueryable<T>沿用IEnumerable<T>无关的事实,IEnumerable<T>并IQueryable<T>具有相同的扩展名的方法,而且它的好,有延期的方法相同的名字,"看起来他们做同样的",但我认为它仍然有时令人困惑......
好奇心的一般问题
它们是框架中的其他示例,具有相同的"体系结构":继承+扩展方法的通用名称?
假设我在MySQL数据库中有两个表.
表格1:
ID Name
1 Jim
2 Bob
3 John
Run Code Online (Sandbox Code Playgroud)
表2:
ID key value
1 address "X Street"
1 city "NY"
1 region "NY"
1 country "USA"
1 postal_code ""
1 phone "123456789"
Run Code Online (Sandbox Code Playgroud)
从数据库中选择行时,有没有办法将第二个表中的行作为列连接到第一个表?
MySQL查询中的所需结果是:
ID Name address city region country postal_code phone
1 Jim X Street NY NY USA NULL 123456789
2 Bob NULL NULL NULL NULL NULL NULL
3 John NULL NULL NULL NULL NULL NULL
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
使用此问题给出的代码, 在传递选择器函数时,OrderBy不会转换为SQL
Func<Table1, string> f = x => x.Name;
var t = db.Table1.OrderBy(f).ToList();
Run Code Online (Sandbox Code Playgroud)
翻译的SQL是:
SELECT
[Extent1].[ID] AS [ID],
[Extent1].[Name] AS [Name]
FROM [dbo].[Table1] AS [Extent1]
Run Code Online (Sandbox Code Playgroud)
好.
我可以理解代码编译:IQueryable继承自IEnumerable,有一个带有Func<TModel, TValue>as参数的OrderBy方法.
我可以理解,ORDER BY子句不是在SQL中生成的,因为我们没有传递一个Expression<Func<TModel, TValue>>OrderBy参数(IQueryable的参数)
但是现场背后会发生什么?"错误的"OrderBy方法会发生什么?没有 ?我无法看到如何以及为什么......我夜晚的任何光明?
我有一个LINQ to Entities查询
From item In ctx.Items
Select new {
ListPrice = item.Cost / (1M - item.Markup)
};
Run Code Online (Sandbox Code Playgroud)
我可以指定EF,我希望它应用cast查询和物化之前将其标价1?有什么EntityFunctions.Cast可能吗?或者我可以使用ESQL cast功能吗?
我希望LINQ能够沿着这些方向生成SQL查询
SELECT cast((Cost / (1 - Markup)) as decimal(10, 2)) AS ListPrice
Run Code Online (Sandbox Code Playgroud)
1我的目标是摆脱一堆精度/缩放查询.因为有十进制减法和除法,所以数学结果是小数(38,26)!这比.NET可以处理的更多,而且超出了我的需要.
我有一个表donor_master:
create table donor_master
(
donor_id number(10) primary key not null,
dob date not null,
age number(3) not null,
gender char(1) not null,
blood_group char(3),
contact_no number(10),
address varchar(50) not null,
city varchar(10) not null,
pin number(10) not null,
state varchar(10) not null,
branch_registration_id number(5) references branch_master(branch_id)
);
Run Code Online (Sandbox Code Playgroud)
当我尝试在过程 insert_donor_master 中插入表时,在编译时出现“值不足”错误。
这是程序:
create or replace procedure insert_donor_master(
vdob donor_master.dob%type,
vage donor_master.age%type,
vgender donor_master.gender%type,
vblood_group donor_master.blood_group%type,
vcontact_no donor_master.contact_no%type,
vaddress donor_master.address%type,
vcity donor_master.city%type,
vpin donor_master.pin%type,
vstate donor_master.state%type,
vbranch_registration_id donor_master.branch_registration_id%type
)
is
begin …Run Code Online (Sandbox Code Playgroud) 我知道我们可以在 HTML 5 中使用带有接受属性的过滤器类型 <input accept="audio/*|video/*|image/*|MIME_type">
但这些所有内容也显示“所有文件”选项。我想要严格限制某些文件类型,例如“*.pdf、所有 Office Word 类型、图像、Excel”。
我们怎样才能做到这一点?
我的代码就像
@Html.TextBoxFor(m => m.Attachment, new { @class = "form-control", type = "file" })
Run Code Online (Sandbox Code Playgroud) 如果你感到困惑的话,我在这里说错了.
我想把Javascript或Css放在我的页面的头部[谁在浏览器中呈现].当我试图把它们放进去的时候我发现他身体里面没有头部标签.
i know that i can easily put in head if i not inherit them from master page.
Run Code Online (Sandbox Code Playgroud)
但是如果我从母版页继承它们,我怎么能放在我的页面上.
我想要一个MVC 3项目的溶剂,我的页面是用Razor viewenzine编写的.
我们遇到以下正则表达式的问题:
(.*?)\|\*\|([0-9]+)\*\|\*(.*?)
Run Code Online (Sandbox Code Playgroud)
它应该匹配以下内容: |*25 *|
我们使用的是.Net Framework 4 RegEx Class,代码如下:
string expression = "(.*?)" +
Regex.Escape(Constants.FIELD_START_DELIMITER_BACK_END) +
"([0-9]+)" +
Regex.Escape(Constants.FIELD_END_DELIMITER_BACK_END) +
"(.*?)";
Regex r = new Regex(expression);
r.Matches(contentText)
Run Code Online (Sandbox Code Playgroud)
使用40.000个字符的文本需要太长时间(如60秒).
但是180.000的文字速度是非常可接受的(3秒或更短)
文本之间的唯一区别是第一个文本(慢速的文本)它全部包含在一行中,没有换行符.这可能是个问题吗?那影响了性能?
谢谢
脚本
public class Element {
public int Id {get;set;}
}
public class ViewModel {
public IList<Element> Elements{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我有一个类型参数的方法Expression<Func<Element, int>>,看起来像m => m.Id
我想改造
m => m.Id (其中m是元素)
至
x => x.Elements[0].Id 其中x是ViewModel,0是"index"参数
我现在拥有的(当然是通用的,为了清晰起见我删除了通用部分)
public static class Helpers {
public static Expression<Func<ViewModel, int>> BuildExpressionArrayFromExpression(
this Expression<Func<Element, int>> expression,
ViewModel model,
int index = 0,
string bindingPropertyName = "Elements"//the name of the "List" property in ViewModel class
)
{
var parameter = Expression.Parameter(typeof(ViewModel), "x");
var viewModelProperty = model.GetType().GetProperty(bindingPropertyName);
Expression …Run Code Online (Sandbox Code Playgroud) 这个问题之前已被其他人提出过,但仍然没有得到它.我正在使用MVC3 Razor,我有屏幕输入故障单.输入数据(textarea note)后,控制器将重定向回同一屏幕.大多数数据仅供显示.如果我使用DisplayFor或DisplayTextFor,则不会回发数据.我使用过HiddenFor.这样可行.但是,我一直听到别人说HiddenFor不理想.我不想编辑因为,我想轻松禁用该字段.(我跟着工作说HiddenFor错了,但不会说原因.:<lol)
剃刀
@Html.DisplayTextFor(m => m.Ticket.Name)
Run Code Online (Sandbox Code Playgroud)
视图模型
public class TicketDetailsViewModel
{
[DisplayName("Customer Name")]
public string Name { get; set; }
Control
[HttpPost]
public ActionResult Detail(TicketDetailsViewModel viewModel)
return RedirectToAction("Detail");
Run Code Online (Sandbox Code Playgroud) c# ×5
asp.net-mvc ×3
linq ×2
razor ×2
.net ×1
asp.net ×1
entity-sql ×1
file-upload ×1
html ×1
ienumerable ×1
iqueryable ×1
javascript ×1
lambda ×1
mysql ×1
oracle ×1
regex ×1
rows ×1
sql ×1
sql-server ×1
viewmodel ×1