小编Rap*_*aus的帖子

将IQueryable.Count <T>与IEnumerable <T>参数一起使用

想象一个类,让我们说可以与一个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>具有相同的扩展名的方法,而且它的好,有延期的方法相同的名字,"看起来他们做同样的",但我认为它仍然有时令人困惑......

好奇心的一般问题

它们是框架中的其他示例,具有相同的"体系结构":继承+扩展方法的通用名称?

c# linq ienumerable iqueryable

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

将多行组合成一行MySQL

假设我在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)

谢谢你的帮助!

mysql rows multiple-columns

13
推荐指数
1
解决办法
2万
查看次数

IQueryable OrderBy with Func <TModel,TValue>:发生了什么

使用此问题给出的代码, 在传递选择器函数时,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方法会发生什么?没有 ?我无法看到如何以及为什么......我夜晚的任何光明?

c# linq-to-entities

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

我可以在LINQ to Entities查询中使用CAST吗?

我有一个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可以处理的更多,而且超出了我的需要.

c# linq sql-server entity-framework entity-sql

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

oracle 错误:没有足够的值

我有一个表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)

sql oracle

5
推荐指数
1
解决办法
2万
查看次数

mvc4 或 html 5 中的文件输入过滤器?

我知道我们可以在 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)

html asp.net asp.net-mvc file-upload asp.net-mvc-4

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

在mvc3项目中为单个页面写css

如果你感到困惑的话,我在这里说错了.

我想把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编写的.

javascript asp.net-mvc razor

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

RegEx绩效问题

我们遇到以下正则表达式的问题:

(.*?)\|\*\|([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秒或更短)

文本之间的唯一区别是第一个文本(慢速的文本)它全部包含在一行中,没有换行符.这可能是个问题吗?那影响了性能?

谢谢

.net c# regex

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

从另一个表达式构建索引表达式

脚本

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)

c# asp.net-mvc lambda expression-trees

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

DisplayFor没有在PostBack上的ViewModel中保存数据

这个问题之前已被其他人提出过,但仍然没有得到它.我正在使用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)

viewmodel razor asp.net-mvc-3

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