Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将循环更改为Linq C#_C#_Linq - Fatal编程技术网

将循环更改为Linq C#

将循环更改为Linq C#,c#,linq,C#,Linq,我在C#中的一个函数要求我过滤一些值。因此,我在其中使用了很多循环来尝试它。它可以工作,但看起来效率不高。你知道如何将下面的代码转换成LinQ吗 感谢您的帮助 var object1 = JsonConvert.DeserializeObject<List<string>>(object1json); foreach (var item1 in table1) { if (item1.Code == Inpu

我在C#中的一个函数要求我过滤一些值。因此,我在其中使用了很多循环来尝试它。它可以工作,但看起来效率不高。你知道如何将下面的代码转换成LinQ吗

感谢您的帮助

  var object1 = JsonConvert.DeserializeObject<List<string>>(object1json);
  foreach (var item1 in table1)
            {
                if (item1.Code == InputCode)
                {
                    for (int i = 0; i < object1.Count(); i++)
                    {
                        tempData temp = new tempData();
                        foreach (var item2 in item1.List) 
                        {
                            if (item2.Code == object1[i])
                            {
                                temp.Code = item2.Code;
                                temp.Description = item2.Description;
                            }
                        }
                        if(temp.Code != null || temp.Description  != null)
                            final.Add(temp);
                    }
                }
            }
var object1=JsonConvert.DeserializeObject(object1json);
foreach(表1中的var项目1)
{
if(item1.Code==InputCode)
{
for(int i=0;i
如果您希望您的代码更高效,正如评论中所指出的,将其转换为Linq并没有真正的帮助。它仍然是相同的逻辑,只是用不同的方式写的。如果您想提高可读性,只需做一些更改即可:

foreach (var item1 in table1.Where(i => i.Code == InputCode))
{
    foreach (var code in object)
    {
        // This could be SingleOrDefault, I don't know if you have duplicates in the list or not
        var item2 = item1.List.LastOrDefault(i => i.Code == code);

        if(item2 != null)
        {
            final.Add(new tempData
            {
                Code = item2.Code,
                Description = item2.Description,
            });
        }
    }
}
如果将整个内容转换为Linq:

var final = table1.Where(i => i.Code == InputCode)
    .SelectMany(item1 => object.Select(code => item1.List.LastOrDefault(i => i.Code == code))
    .Where(item2 => item2 != null)
    .Select(item2 => new tempData
    {
        Code = item2.Code,
        Description = item2.Description,
    })
    .ToList();

就我个人而言,我更喜欢第一个选项,因为它更容易阅读。

我想你发布的是示例代码而不是实际代码,否则最好避免使用C#中的像
object
这样的关键字。反正

var final = table1.Where(item1 => item1.Code == InputCode)
    .SelectMany(item1 => item1.List)
    .Where(item2 => @object.Contains(item2.Code))
    .Where(temp => temp.Code != null || temp.Description != null)
    .Select(item2 => new tempData()
    {
        Code = item2.Code,
        Description = item2.Description
    });

此代码不会编译(
object
是一个关键字)。什么是
对象
?它是什么类型的?
.Count()的实现是什么
看起来像吗?我不希望将其转换为LINQ会提高效率。@OP帖子中的内部
foreach
似乎正在执行逻辑
JOIN
操作-如果使用基于哈希的查找,速度会快得多,具体取决于
对象的大小和
item1.使用hashmap列出
@Dai Yes。除非改变算法,否则LINQ将具有同等的效率。您的代码实际上不会对
对象[i]
执行任何操作-这有什么意义?该死!比我快,我只是在LINQPad上打出来的。为了可读性,我会选择选项2,但我的格式也与您的不同,这样它就不会“打包”且看起来很忙。您可能可以将两个
,其中
调用合并为一个。
@object.Contains()
比我编写的
SelectMany()
表达式可读性好得多,请注意,如果
item1.List中存在重复条目,则它可能与原始代码有不同的行为