嗨,我想知道在C#中解析OData $过滤器字符串的最佳方法是什么
/ API/organizations?$ filter ="name eq'Facebook'或name eq'Twitter'和subscriber gt'30''
应该返回所有名称为Facebook或Twitter且拥有超过30个订阅者的组织.我已经研究了很多,但找不到任何不围绕WCF的解决方案.我正在考虑使用Regex并对它们进行分组,因此我有一个Filter类列表,这样:
Filter
Resource: Name
Operator: Eq
Value: Facebook
Filter
Resource: Name
Operator: Eq
Value: Twitter
Filter
Resource: Subscribers
Operator: gt
Value: 30
Run Code Online (Sandbox Code Playgroud)
但我很难过如何处理ANDs/ORs.
我们看到内存资源没有被释放:
使用 .NET Core 的以下代码:
class Program
{
static void Main(string[] args)
{
while (true) {
var testRunner = new TestRunner();
testRunner.RunTest();
}
}
}
public class TestRunner {
public void RunTest() {
using (var context = new EasyMwsContext()) {
var result = context.FeedSubmissionEntries.Where(fse => TestPredicate(fse)).ToList();
}
}
public bool TestPredicate(FeedSubmissionEntry e) {
return e.AmazonRegion == AmazonRegion.Europe && e.MerchantId == "1234";
}
}
Run Code Online (Sandbox Code Playgroud)
如果我删除测试谓词,.Where我会得到预期的直线,使用谓词,内存将继续无限期地增加。
因此,虽然我可以解决问题,但我想了解发生了什么?
编辑:
将该行更改为:
public void RunTest() {
using (var context = new EasyMwsContext()) { …Run Code Online (Sandbox Code Playgroud) 嗨我有以下方法,我传递的值为"2014年1月7日13:48:46",据我所知,TryParseExact应匹配格式"dd MMM yyyy hh:mm:ss"并返回true,然而它回归虚假,任何想法?
string[] formats= {"dd-MM-yyyy hh:mm:ss",
"dd MMM yyyy hh:mm:ss",
"dd MMM yyyy",
"hh-mm-ss",
"dd-MM-yyyy",
"dd-MM-yy",
};
DateTime result;
if (DateTime.TryParseExact(value, formats, CultureInfo.CurrentCulture, DateTimeStyles.None, out result))
{
return result;
}
return null;
Run Code Online (Sandbox Code Playgroud) 我创建了一个简单的类来直接测试它,在Edit POST操作中,如果某个属性不在表单中,它将使用数据库中已存在的值,而是将其设置为null并覆盖任何值.
这是来自脚手架生成,让我说我注释掉密码和密码确认,因为我不希望他们编辑它,所以他们将被排除在POST值之外.
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>User</h4>
<hr />
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.ID)
<div class="form-group">
@Html.LabelFor(model => model.Email, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.FirstName, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.FirstName)
@Html.ValidationMessageFor(model => model.FirstName)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.LastName, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.LastName)
@Html.ValidationMessageFor(model => model.LastName) …Run Code Online (Sandbox Code Playgroud)