C# 我怎样才能做一个简单的=&引用;在LINQ谓词中检查并同时进行字符串比较?

C# 我怎样才能做一个简单的=&引用;在LINQ谓词中检查并同时进行字符串比较?,c#,linq,C#,Linq,我用这个方法列出CosmosDB的数据: async static Task ListData<T>(Expression<Func<T, Boolean>> predicate) where T : LogBase { var abc = await cosmosManager.GetDocumentItemsAsync<T>(predicate); foreach (var a in abc) Console.Write

我用这个方法列出CosmosDB的数据:

async static Task ListData<T>(Expression<Func<T, Boolean>> predicate) where T : LogBase
{
   var abc = await cosmosManager.GetDocumentItemsAsync<T>(predicate);
   foreach (var a in abc)
      Console.WriteLine(a.DateYYMMDD);
}

我想应该解析为Datetime,而不是Integer。如下所示:

await ListData<LogFeedback>(x => x.Activity == "Feedback" &&
                            DateTime.ParseExact(x.DateYYMMDD, "yyMMdd", System.Globalization.CultureInfo.InvariantCulture) < Datetime.Parse("2020-03-20"));
wait ListData(x=>x.Activity==“反馈”&&
DateTime.ParseExact(x.dateyymdd,“yymdd”,System.Globalization.CultureInfo.InvariantCulture)
由于“日期”存储为字符串,格式易于比较,因此比较前无需转换为数字,只需直接比较字符串:

await ListData<LogFeedback>(x => x.Activity == "Feedback" &&
                            x.DateYYMMDD) < "200321");
wait ListData(x=>x.Activity==“反馈”&&
x、 年月日)<“200321”);

当然,这个问题的真正解决方案是在数据库中使用适当的数据类型,将日期存储为日期而不是字符串,这除了这个特殊问题之外还有其他好处。因此,可能还有其他问题

        var t1 = DateTime.ParseExact("200401", "yyMMdd", System.Globalization.CultureInfo.InvariantCulture);
        var t2 = DateTime.Parse("2020-03-20");
        Debug.WriteLine("t1=" + t1); //t1=2020/4/1 上午 12:00:00
        Debug.WriteLine("t2=" + t2); //t2=2020/3/20 上午 12:00:00
        Debug.WriteLine("t1<t2 ==" + (t1<t2)); //t1<t2 ==False
var t1=DateTime.ParseExact(“200401”,“yyMMdd”,System.Globalization.CultureInfo.InvariantCulture);
var t2=DateTime.Parse(“2020-03-20”);
Debug.WriteLine(“t1=”+t1)//t1=2020/4/1上午 12:00:00
Debug.WriteLine(“t2=”+t2)//t2=2020/3/20上午 12:00:00

Debug.WriteLine(“t1”将日期存储为正确的日期,而不是字符串。但是,给定当前格式(根据列名推断)一个简单的字符串比较就足够了。去掉这两个解析。除了像劳埃德这样迫使银行在1月份关闭的明显的Y2K错误之外,因为它不可能知道实际使用的年份,为什么要使用
int.parse
呢?
DateYYMMDD
的类型是什么?如果是字符串,你可以使用
DatEYMMDD<“200331"
。如果是int,请使用
DateYYMMDD<200331
。无需使用双精度parsing@Alejandro-年没问题。这是过去两周及以后生成的日志数据。你能举个例子吗。我试过一些方法now@PanagiotisKanavos-dateyymdd是字符串200401将是2020年4月1日。在Cosm中存储和查询日期osDB如中所述。以ISO8601 UTC格式(即
yyy-MM-DDThh:MM:ss.sssZ
)存储日期,并将其映射到客户端上的
DateTime
。这将允许您通过简单的日期比较进行查询,例如:
其中(o=>o.ShipDate>=DateTime.UtcNow.AddDays(-3))
给出一个错误,表示运算符<不能应用于字符串和类型的运算符string@Alan2DateTime有这样一个操作符。只是不要使用字符串。问题是关于LINQ查询,而不是日期比较。解析操作无法转换为SQL或CosmosDB使用的任何语言。OP的问题是使用了错误的类型格式不好
public async Task<List<T>> GetDocumentItemsAsync<T>(Expression<Func<T, Boolean>> predicate) where T : class
{
    List<T> Items = new List<T>();
    try
    {
        collectionLink = UriFactory.CreateDocumentCollectionUri(databaseId, collectionId);
        var i = 1;
        var query = client.CreateDocumentQuery<T>(collectionLink)
            .Where(predicate)
            .AsDocumentQuery();
        while (query.HasMoreResults)
        {
            Console.WriteLine(i++);
            var retrivedData1 = await query.ExecuteNextAsync<T>();
            Items.AddRange(retrivedData1);
        }
    }
    catch (DocumentClientException ex)
    {
        Debug.WriteLine("Error: ", ex.Message);
    }
    return Items;
}
await ListData<LogFeedback>(x => x.Activity == "Feedback" &&
                            DateTime.ParseExact(x.DateYYMMDD, "yyMMdd", System.Globalization.CultureInfo.InvariantCulture) < Datetime.Parse("2020-03-20"));
await ListData<LogFeedback>(x => x.Activity == "Feedback" &&
                            x.DateYYMMDD) < "200321");
        var t1 = DateTime.ParseExact("200401", "yyMMdd", System.Globalization.CultureInfo.InvariantCulture);
        var t2 = DateTime.Parse("2020-03-20");
        Debug.WriteLine("t1=" + t1); //t1=2020/4/1 上午 12:00:00
        Debug.WriteLine("t2=" + t2); //t2=2020/3/20 上午 12:00:00
        Debug.WriteLine("t1<t2 ==" + (t1<t2)); //t1<t2 ==False