我在下面的代码中使用Generic Filter,传递了任何搜索文本,但contains方法是区分大小写的,我怎样才能写入忽略大小写.
public static class QueryExtensions
{
public static IQueryable<T> Filter<T>(this IQueryable<T> query, string search)
{
var properties = typeof(T).GetProperties().Where(p =>
/*p.GetCustomAttributes(typeof(System.Data.Objects.DataClasses.EdmScalarPropertyAttribute),true).Any() && */
p.PropertyType == typeof(String));
var predicate = PredicateBuilder.False<T>();
foreach (var property in properties )
{
predicate = predicate.Or(CreateLike<T>(property,search));
}
return query.AsExpandable().Where(predicate);
}
private static Expression<Func<T,bool>> CreateLike<T>( PropertyInfo prop, string value)
{
var parameter = Expression.Parameter(typeof(T), "f");
var propertyAccess = Expression.MakeMemberAccess(parameter, prop);
var like = Expression.Call(propertyAccess, "Contains", null, Expression.Constant(value,typeof(string)));
return Expression.Lambda<Func<T, bool>>(like, parameter);
}
}
Run Code Online (Sandbox Code Playgroud) 最近,我们已经移动到EF 6,我们已经开始使用EF异步命令.例如,在我的存储库中,我有以下方法:
// Gets entities asynchron in a range starting from skip.
// Take defines the maximum number of entities to be returned.
public async Task<IEnumerable<TEntity>> GetRangeAsync(int skip, int take)
{
var entities = this.AddIncludes(this.DbContext.Set<TEntity>())
.OrderBy(this.SortSpec.PropertyName)
.Skip(skip)
.Take(take)
.ToListAsync();
return await entities;
}
Run Code Online (Sandbox Code Playgroud)
现在我必须修改异步数据检索的UI.下面是我的UI类; 此类绑定到WPF.
public sealed class RepositoryCollectionView<TEntity, TEntityViewModel> : IList<TEntityViewModel>,
ICollectionView,
IEditableCollectionView,
IComparer
...
public TEntityViewModel this[int index]
{
get
{
return await this.GetItem(index).Result;
}
set
{
throw new NotSupportedException();
}
}
...
...
...
Run Code Online (Sandbox Code Playgroud)
问题:在UI中我创建了一个名为GetItemAsync(index)的新方法,我需要从Indexer调用此方法; 当我将关键字async写入索引器时:
public …
我正在使用Asp.Net MVC并构建电子商务应用程序.
我的数据库中有4个表
Product 其中有 ProductId(PK), Name, Price, StoreId(FK)
Store 其中有 StoreId(PK), Name, CreatedOn
Order 其中有 OrderId(PK), StoreId(FK), OrderDate, OrderTotal
OrderDetail 其中有 OrderDetailId(PK), OrderId(FK), Quantity, UnitPrice, Weight
当我尝试删除单个产品时,它不会给出任何错误并删除产品,如果我删除Order记录它给出了OrderDetails外键的错误,我知道我必须首先删除OrderDetail记录然后删除订单记录.
我的情况是,Store有多个产品,每个商店都有订单,然后订购详细信息.
现在,我不想每次删除单个记录,因为它需要很多时间.我想删除一个STORE,其他表(Product,Order,OrderDetails)中的所有记录也将被删除.我怎样才能做到这一点 ?
我试过这个代码在我的IdentityModel.cs中
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>()
.HasRequired(s => s.Store)
.WithMany()
.HasForeignKey(d => d.StoreId)
.WillCascadeOnDelete(false); // also tried with TRUE, didn't work
modelBuilder.Entity<Order>()
.HasRequired(s => s.Store)
.WithMany()
.HasForeignKey(d => d.StoreId)
.WillCascadeOnDelete(false); // also tried with TRUE, didn't work
modelBuilder.Entity<OrderDetail>()
.HasRequired(s => s.Order)
.WithMany()
.HasForeignKey(d => …Run Code Online (Sandbox Code Playgroud) 我在Visual Studio 2015中遇到了一个奇怪的行为.我正在编写一个针对4.5.2 .Net Framework的应用程序:
然后在应用程序中,我尝试使用在C#6.0(来自.Net 6.0)中实现的一些东西:
int number = 456;
var name = nameof(number);
string str = $"Time = {DateTime.Now}";
Run Code Online (Sandbox Code Playgroud)
我很确定nameof使用的字符串格式$仅在.Net 4.6中可用,但我仍然可以编译此代码 - 尽管我的目标是4.5.2.
我在Visual Studio 2013中运行相同的代码,也针对4.5.2版本,但这次我无法编译代码(nameof未找到).
怎么可能,VS2015允许我编译目标.Net Framework版本中不应该允许的代码?
我在黑暗中拍摄的是VS2015能够将C#6.0代码计算到CIL中,这仍然与以前的版本兼容,但我不确定它是否是正确的猜测.
在 中Python 3.5,我想使用locale.atof以下代码将德语数字字符串转换为浮点数:
import locale
from locale import atof
locale.setlocale(locale.LC_ALL, 'de_DE')
number = atof('17.907,08')
Run Code Online (Sandbox Code Playgroud)
然而,这提出了一个ValueError:
ValueError: could not convert string to float: '17.907.08'
Run Code Online (Sandbox Code Playgroud)
atof()为了这个而生的吗? 我有时会引发此异常:
System.InvalidOperationException: 'The ConnectionString property has not been initialized.'
Run Code Online (Sandbox Code Playgroud)
我使用内置的依赖注入:
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IDbConnection>(db => new SqlConnection(
Configuration.GetConnectionString("AppConnectionString")));
services.AddScoped<IAppConfigurationRepository, AppConfigurationRepository>();
services.AddScoped<IHomeworkingRequestRepository, HomeworkingRequestRepository>();
services.AddScoped<IEmployeeRepository, EmployeeRepository>();
services.AddScoped<IEmployeeService, EmployeeService>();
services.AddScoped<IHomeworkingRequestService, HomeworkingRequestService>();
services.AddMvc();
}
Run Code Online (Sandbox Code Playgroud)
之前,我已经有这个错误了。services.AddScoped<IDbConnection>我改成的代码services.AddTransient<IDbConnection>解决了这个问题。但现在我又犯了这个错误。
编辑
请查找发生异常时的代码:
public class EmployeeRepository : IEmployeeRepository
{
private readonly IDbConnection _connection;
public EmployeeRepository(IDbConnection connection)
{
_connection = connection;
}
public IEnumerable<Employee> GetAllActiveEmployees()
{
string query = @"
SELECT
FirstName
,LastName
,BusinessUnit
FROM Employees";
using (var db = _connection)
{
_connection.Open(); …Run Code Online (Sandbox Code Playgroud) 我想知道 await 和 .then 是否可以在同一个异步函数中使用?这是我的功能:
uploadImageToImgur: async function (file) {
return new Promise(function(resolve, reject) {
const url = 'https://api.imgur.com/3/image',
reader = new FileReader();
if (file) {
reader.readAsDataURL(file);
}
reader.onloadend = async function () {
let { result } = reader;
try {
const request = await fetch(url, {
method: 'POST',
headers: {
"Authorization": 'my auth',
},
body: result.replace(/^data:image\/(png|jpg|jpeg|gif);base64,/, "")
})
.then((response) => {
response.json()
.then(data => {
resolve(data.data.link)
})
});
} catch (e) {
reject(e);
}
}
});
},
Run Code Online (Sandbox Code Playgroud)
然后我在另一个函数中调用这个函数,在那里我使用我从 …
我确信这个问题会证明我的无知,但我很难理解这一点。我愿意问一个愚蠢的问题以获得一个好的答案。
我读过的所有关于异步流的帖子都很好地展示了该功能,但它们没有解释为什么它比替代方案有所改进。
或者,也许,什么时候应该通过良好的旧客户端 - 服务器通信使用异步流?
我可以看到流式传输大文件的内容对于异步流来说可能是一个很好的用途,但是我看到的许多示例都使用异步流来传输少量传感器数据(例如温度)。似乎带有温度传感器的 IoT 设备只需通过 HTTP POST 将数据发送到服务器,服务器就可以响应。在这种情况下,服务器为什么要实现异步流?
当你努力理解这些话时,我已经能感受到你的痛苦,但请怜悯我。:)
根据要求,这里有一些我遇到的让我感到困惑的例子。当我找到它们时,我会发布更多,但我想继续让你开始:
我正在修补IAsyncEnumerable<T>C#8.0中的新内容。假设我有一些我想使用的方法:
public IAsyncEnumerable<T> SomeBlackBoxFunctionAsync<T>(...) { ... }
Run Code Online (Sandbox Code Playgroud)
我知道我可以将其与await foreach...语法一起使用。但是,可以说,我的使用者需要从该功能中获得所有结果,然后才能继续。在继续之前等待所有结果的最佳语法是什么?换句话说,我希望能够执行以下操作:
// but that extension - AllResultsAsync() - doesn't exist :-/
List<T> myList = await SomeBlackBoxFunctionAsync<T>().AllResultsAsync();
Run Code Online (Sandbox Code Playgroud)
正确的方法是什么?
我们有这样的代码:
var intList = new List<int>{1,2,3};
var asyncEnumerables = intList.Select(Foo);
private async IAsyncEnumerable<int> Foo(int a)
{
while (true)
{
await Task.Delay(5000);
yield return a;
}
}
Run Code Online (Sandbox Code Playgroud)
我需要await foreach为每个asyncEnumerable条目开始。每次循环迭代都应该相互等待,每次迭代完成后,我需要收集每次迭代的数据并通过另一种方法对其进行处理。
我可以通过 TPL 以某种方式实现吗?否则,你不能给我一些想法吗?
c# ×8
.net ×3
c#-8.0 ×3
async-await ×2
.net-core ×1
asp.net-core ×1
asynchronous ×1
c#-6.0 ×1
javascript ×1
linq ×1
linqkit ×1
promise ×1
python ×1
python-3.5 ×1
roslyn ×1
stream ×1