linq Lambda where表达式[closed]

doinxwow  于 2023-06-19  发布在  其他
关注(0)|答案(2)|浏览(136)

**关闭。**此题需要debugging details。目前不接受答复。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
6年前关闭。
这篇文章是编辑并提交审查3天前.
Improve this question
我想得到身份证,但我只有名字。我的代码看起来像这样:

var comments = new List<Comments>
        {
            new Comments{
                CommunityId = community.FirstOrDefault(comid => comid.IdCommunity.Where(comid.CommunityName == "TestCommunity")),
            }
        };

Comments是一个类:

public class Comments
{
    public int IdComment { get; set; }
    public DateTime Timestamp { get; set; }
    public string Text { get; set; }
    public int UserId { get; set; }
    public int CommunityId { get; set; }
}

社区也是:

public class Community
{
    public int IdCommunity { get; set; }
    public string CommunityName { get; set; }
    public Pictures Picture { get; set; }
}

但是在C#中,where语句在这个场景中并不存在。

mkshixfv

mkshixfv1#

尝试:

var comments = new List<Comments>
        {
            new Comments{
                CommunityId = community.FirstOrDefault(comid => comid.CommunityName == "TestCommunity")?.IdCommunity, //CommunityId should be nullable
            }
        };
4dbbbstv

4dbbbstv2#

当你使用linq时,首先要尝试简化逻辑,并在步骤上打破它。
因此,首先,您需要使用CommunityName查找所有元素,Where语句将有助于此:

var commList = community.Where(com => com.CommunityName == "TestCommunity");

现在在commList中,我们得到了它们。第二,你需要一个新的数组(IEnumerable)和Ids:

rawIds = commList.Select(x=>x.IdCommunity);

就这样。你的下一步是先做一个记录:

rawId = rawIds.First();

现在你有了raw id,raw因为它可能是null。您需要检查它是否为Null:

int Id;
if(rawId==null)
    Id = -1;
else
    Id = Convert.ToInt32(rawId);

上面记录可以简化为:

int Id = rawId == null? -1 : Convert.ToInt32(rawId);

现在只需一步一步地加入所有linqs:

rawId = community.Where(com => com.CommunityName == "TestCommunity").Select(com => com.IdCommunity).First();
int id = rawId == null ? -1 : Convert.ToInt32(rawId);

相关问题