C# 赋值时如何在lambda表达式中设置条件

C# 赋值时如何在lambda表达式中设置条件,c#,sharepoint,lambda,expression,linq-to-sharepoint,C#,Sharepoint,Lambda,Expression,Linq To Sharepoint,我正在尝试为我的项目分配一个值,但我需要设置一个条件,因为id会根据语言的不同而变化 Expression<Func<ListItem, object>>[] fieldsToRetreive = new Expression<Func<ListItem, object>>[] { item => item["A"], // item => item["B"], // item

我正在尝试为我的项目分配一个值,但我需要设置一个条件,因为id会根据语言的不同而变化

Expression<Func<ListItem, object>>[] fieldsToRetreive 
    = new Expression<Func<ListItem, object>>[] {
        item => item["A"], //
        item => item["B"], //
        item => item["C"], //
        item => item["D"], //
        item => item["E"], //
        item => item["F"], //
        item => item["G"], //
        item => item["H"],
    },
更新: 下面是函数的更多代码

private List<ListItem> FindItemsWithContentType(List list, string contentTypeId, DateTime? notOlderThan = null)
        {
            DateTime searchDate = new DateTime(1990, 01, 01);

            if (notOlderThan.HasValue && notOlderThan.Value.Date == DateTime.Today)
                searchDate = notOlderThan.Value.AddDays(-1); // Sharepoint does not take time into account, so we roll back to yesterday if today
            else
                notOlderThan = searchDate;
            string date = DateTime.SpecifyKind(searchDate, DateTimeKind.Utc).ToString("yyyy-MM-ddTHH:mm:ssZ"); // could also be like: "<Today OffsetDays=\"-7\" />"

            CamlQuery query = new CamlQuery()
            {
                ViewXml = string.Format("<View><Query><Where><And><BeginsWith><FieldRef Name='ContentTypeId' /><Value Type='ContentTypeId'>{0}</Value></BeginsWith><Gt><FieldRef Name='Modified' /><Value Type='DateTime'>{1}</Value></Gt></And></Where></Query></View>", contentTypeId, date)
            };

            ListItemCollection items = list.GetItems(query);

            Expression<Func<ListItem, object>>[] fieldsToRetreive = new Expression<Func<ListItem, object>>[] {
                                                                                                                item => item["A"],                                                                                                                 item => item["B"],                                                                                                               item => item["C"],                                                                                                             item => item["D"],                                                                                                              item => item["E"],                                                                                                                item => item["F"],                                                                                                               item => item["G"],                                                                                                                 item => item["H"],                                                                                                            item => item["I"] ?? item["J"]
                                                                                                                                                                                                                            };


            // Making sure we load the content of the item fields
            this.AppOnlyContext.Load(items, i => i.Include(fieldsToRetreive));
            this.AppOnlyContext.ExecuteQuery();
私有列表FindItemWithContentType(列表列表,字符串contentTypeId,日期时间?notOlderThan=null)
{
DateTime searchDate=新的日期时间(1990,01,01);
if(notOlderThan.HasValue&¬OlderThan.Value.Date==DateTime.Today)
searchDate=notOlderThan.Value.AddDays(-1);//Sharepoint不考虑时间,所以如果今天出现,我们将回滚到昨天
其他的
NOTOLDERTHEN=搜索日期;
string date=DateTime.SpecifyKind(searchDate,DateTimeKind.Utc).ToString(“yyyy-MM-ddTHH:MM:ssZ”);//也可以类似于:
CamlQuery query=新建CamlQuery()
{
ViewXml=string.Format(“{0}{1}”,contentTypeId,日期)
};
ListItemCollection items=list.GetItems(查询);
表达式[]FieldStoreTreve=新表达式[]{
项目=>项目[“A”]、项目=>项目[“B”]、项目=>项目[“C”],item=>item[“D”],item=>item[“E”],item=>item[“F”],item=>item[“G”],项目=>项目[“H”]、项目=>项目[“I”]??项目[“J”]
};
//确保加载项目字段的内容
this.AppOnlyContext.Load(items,i=>i.Include(fieldstoretreve));
this.AppOnlyContext.ExecuteQuery();

这是一个条件表达式,通常称为“三元”,因为它有三个操作数:
item=>(item[“I”!=null)?item=>item[“I”]:item=>item[“J”];
item=>item[“I”!=null?item[“I”]:item[“J”
或更短的
item=>item=>item[“I”?“J”]
@EdPlunkett我收到以下错误:无法确定条件表达式的类型,因为“lambda表达式”和“lambda表达式”之间没有隐式转换@alphonsoCulano请显示导致该错误的代码。但您确实应该使用DK和Racil建议的空合并运算符,这是我由于高级老年痴呆症而忽略的。@alphonsoCulano您可以在这里共享完整的上下文吗?看起来您正在使用,对吗?所以它将翻译您的C#LINQ表达式将sion转换为Shartepoint内部实际使用的其他语言。可能是VB,VBA…?我已将linq添加到sharepoint标记。您是我们看到的关于该主题的第27个问题。祝贺您!
private List<ListItem> FindItemsWithContentType(List list, string contentTypeId, DateTime? notOlderThan = null)
        {
            DateTime searchDate = new DateTime(1990, 01, 01);

            if (notOlderThan.HasValue && notOlderThan.Value.Date == DateTime.Today)
                searchDate = notOlderThan.Value.AddDays(-1); // Sharepoint does not take time into account, so we roll back to yesterday if today
            else
                notOlderThan = searchDate;
            string date = DateTime.SpecifyKind(searchDate, DateTimeKind.Utc).ToString("yyyy-MM-ddTHH:mm:ssZ"); // could also be like: "<Today OffsetDays=\"-7\" />"

            CamlQuery query = new CamlQuery()
            {
                ViewXml = string.Format("<View><Query><Where><And><BeginsWith><FieldRef Name='ContentTypeId' /><Value Type='ContentTypeId'>{0}</Value></BeginsWith><Gt><FieldRef Name='Modified' /><Value Type='DateTime'>{1}</Value></Gt></And></Where></Query></View>", contentTypeId, date)
            };

            ListItemCollection items = list.GetItems(query);

            Expression<Func<ListItem, object>>[] fieldsToRetreive = new Expression<Func<ListItem, object>>[] {
                                                                                                                item => item["A"],                                                                                                                 item => item["B"],                                                                                                               item => item["C"],                                                                                                             item => item["D"],                                                                                                              item => item["E"],                                                                                                                item => item["F"],                                                                                                               item => item["G"],                                                                                                                 item => item["H"],                                                                                                            item => item["I"] ?? item["J"]
                                                                                                                                                                                                                            };


            // Making sure we load the content of the item fields
            this.AppOnlyContext.Load(items, i => i.Include(fieldsToRetreive));
            this.AppOnlyContext.ExecuteQuery();