在新的C#6.0中,我们可以使用lambda表达式定义方法和属性.
例如这个属性
public string Name { get { return First + " " + Last; } }
Run Code Online (Sandbox Code Playgroud)
现在可以定义如下:
public string Name => First + " " + Last;
Run Code Online (Sandbox Code Playgroud)
有关表达式函数成员的信息,请访问:http://blogs.msdn.com/b/csharpfaq/archive/2014/11/20/new-features-in-c-6.aspx
有没有人知道使用新语法时是否有任何开销?它可以减慢(或提高效率)应用程序,或者它可能没关系?
我正在尝试从LocalDb获取数据到我的MVC控制器.我试过这个:
UsersContext db = new UsersContext();
var users = db.UserProfiles.Where(u => u.UserId == WebSecurity.CurrentUserId)
.Include(u => u.LastName).ToList();
Run Code Online (Sandbox Code Playgroud)
它返回此错误:
指定的包含路径无效.EntityType"ChatProj.Models.UserProfile"未声明名称为"LastName"的导航属性.
知道为什么它不起作用吗?
long添加新迁移(代码优先)时,会正确映射具有数据类型的类属性,但ulongmysql的EF提供程序会跳过数据类型.如何映射属性以使用mysql unsigned bigint?
这是我想要做的具体例子.
考虑这个string.Join功能.在.NET 4.0之前,只有两个重载,两者都需要一个string[]参数.
从.NET 4.0开始,有一些新的重载采用了更灵活的参数类型,包括IEnumerable<string>.
我有一个库,其中包含一个Join基本上完成.NET 4.0 string.Join功能的功能.我只是想知道我是否可以使这个功能的实现依赖于目标.NET框架.如果是4.0,它可以简单地在string.Join内部调用.如果是3.5或更早,它可以调用自己的内部实现.
string.Join,使用IEnumerable<string>参数调用甚至不会编译 ; 所以无论我使用什么方法都必须在编译之前进行.(Environment.Version例如,在运行时检查属性不起作用.)我花了两天时间想知道为什么这不起作用,但对于我的其他表格,它工作得非常好.我甚至测试了包含许多字段的其他模型.特别是这个,即使只有2个字段也不起作用.我知道我可能会错过一个明显的部分,请帮忙.
这是我的模特
public class ReceivedItem
{
public int ReceivedItemID { get; set; }
public int ItemID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
视图模型
public class ReceivedItemViewModel
{
public int ReceivedItemID { get; set; }
public int ItemID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
调节器
[GridAction]
public ActionResult GetReceivedItems()
{
return View(new GridModel(GetReceivedItemsViewModels()));
}
private IQueryable<ReceivedItemViewModel> GetReceivedItemsViewModels()
{
return db.ReceivedItems
.Select(
c => new ReceivedItemViewModel
{
ItemID = c.ItemID
});
}
Run Code Online (Sandbox Code Playgroud)
视图
@(Html.Telerik().Grid<ReceivedItem>()
.Name("grdItems")
.DataBinding(binding => binding.Ajax()
.Select("GetReceivedItems", "Receiving"))
.DataKeys(keys => keys.Add(o => …Run Code Online (Sandbox Code Playgroud) 我的域模型有很多复杂的财务数据,这是对各种实体的多个属性进行相当复杂计算的结果.我通常将这些作为[NotMapped]属性包含在适当的域模型中(我知道,我知道 - 关于将业务逻辑放在您的实体中存在很多争论 - 务实,它只适用于AutoMapper并让我定义可重用DataAnnotations- 讨论是否这样做是好还是不好不是我的问题.
只要我想实现整个实体(以及任何其他依赖实体,通过.Include()LINQ调用或在实现后通过其他查询),然后在查询后将这些属性映射到视图模型,这样就可以正常工作.当尝试通过投影到视图模型而不是实现整个实体来优化有问题的查询时,会出现问题.
考虑以下域模型(显然简化):
public class Customer
{
public virtual ICollection<Holding> Holdings { get; private set; }
[NotMapped]
public decimal AccountValue
{
get { return Holdings.Sum(x => x.Value); }
}
}
public class Holding
{
public virtual Stock Stock { get; set; }
public int Quantity { get; set; }
[NotMapped]
public decimal Value
{
get { return Quantity * Stock.Price; }
}
}
public class Stock
{
public string …Run Code Online (Sandbox Code Playgroud) 我被困在我的ASP.NET MVC 3应用程序的某个地方.这是我得到的错误:
LINQ to Entities不支持指定的类型成员'AccommPropertyTags'.仅支持初始值设定项,实体成员和实体导航属性.
我已经找到了如何在以下文章中解决这个问题:
但我的有点奇怪.
这是我的实体的部分类之一:
[MetadataType(typeof(AccommPropertyWebDetail.MetaData))]
public partial class AccommPropertyWebDetail {
public virtual ICollection<string> AccommPropertyTags {
get {
return Helpers.AccommPropertyTag.CreateStringListFromString(this.PropertyTags);
}
}
private class MetaData {
[Required, StringLength(50)]
public string Category { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,AccommPropertyTags属性是typeof ICollection<string>.我在控制器中尝试的内容如下:
public ViewResult Tag(string tag) {
var _rawTag = HttpUtility.UrlDecode(tag);
ViewBag.Tag = _rawTag;
var model = _accommpropertyrepo.GetAllAccommPropertiesFullWebIgnoringApprovalStatus();
model = model.Where(
x => x.AccommPropertyTags.Any(
y => y == _rawTag
)
);
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
由于我在 …
c# asp.net-mvc entity-framework entity-framework-4.1 asp.net-mvc-3
这是我的班级:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName { get { return FirstName + " " + LastName; } }
}
Run Code Online (Sandbox Code Playgroud)
这是我的清单:
var persons = new List<Person>();
persons.Add(...);
persons.Add(...);
etc.
Run Code Online (Sandbox Code Playgroud)
如果我尝试通过"计算"属性FullName搜索列表,如下所示:
return persons.Where(p => p.FullName.Contains("blah"))
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
System.NotSupportedException:LINQ to Entities中不支持指定的类型成员'FullName'.仅支持初始值设定项,实体成员和实体导航属性.
我怎么能绕过这个?
我创建了一个部分类文件,以便为我的Entity-Framework生成的模型添加新属性.
我使用的是WebAPI + OData,$元数据没有列出我的新/自定义属性,因此它返回的JSON不包含我的新/自定义属性.
例如,假设我的实体是"人"
"Person"有一个Database属性; NumSpouses; 一个在$元数据中返回的int,如下所示:
<Property Name="NumSpouses" Type="Edm.Int32"/>
这很好,但是我将这样的属性添加到一个单独的文件中,并带有一个部分类:
public partial class Person {
...
public string MarriedStatus {
get { return this.NumSpouses==0 ? "Single" : "Married"; }
}
...
}
Run Code Online (Sandbox Code Playgroud)
如何在我的OData响应中获得此属性?
<Property Name="MarriedStatus" Type="Edm.String"/>
目前,如果我问MarriedStatus的$expand(就好像它是一个NavigationProperty ....它不是[我想我会尝试$不管怎么说扩大,因为如果它神奇地提供自定义属性]),我得到的消息是这样的:
{
"odata.error":{
"code":"","message":{
"lang":"en-US","value":"The query specified in the URI is not valid. Could not find a property named 'MarriedStatus' on type 'fakeDataModels.Person'."
},"innererror":{
"message":"Could not find a property named 'MarriedStatus' on type 'fakeDataModels.Person'.","type":"Microsoft.Data.OData.ODataException","stacktrace":" …Run Code Online (Sandbox Code Playgroud) 我有两个类Employee和Territory:
public class Territory
{
public string TerritoryID { get; set; }
public string TerritoryDescription { get; set; }
public IEnumerable<Employee> Employees { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我试图使用LINQ通过TerritoryID拉出Employees并获得异常:
IEnumerable<Employee> empList = context.Territories
.Where(x => x.TerritoryID == territoryID)
.Select(y => y.Employees)
.ToList();
Run Code Online (Sandbox Code Playgroud)
例外情况是:
无法将System.Collections.Generic.List <System.Collections.Generic.IEnumerable <Employee >>类型隐式转换为System.Collections.Generic.IEnumerable <Employee>.存在显式转换.